В языке C++ существует три вида циклов: цикл while
c предусловием, цикл while
с постусловием,
цикл for
.
while
("пока") с предусловиемЦикл while
с предусловием позволяет выполнить одну
и ту же последовательность действий пока проверяемое условие истинно.
При этом условие записывается до тела цикла и проверяется до выполнения
тела цикла.
При выполнении цикла while
сначала проверяется условие.
Если оно ложно, то цикл не выполняется и управление передается
на следующую инструкцию после тела цикла while
.
Если условие истинно, то выполняется инструкция, после чего
условие проверяется снова и снова выполняется инструкция.
Так продолжается до тех пор, пока условие будет истинно.
Как только условие станет ложно, работа цикла завершится и управление передастся следующей инструкции
после цикла.
Синтаксис цикла while
("пока") c предусловием такой:
while (условие) { блок инструкций }
Например, следующий фрагмент программы напечатает на экран квадраты всех целых чисел от 1 до 10:
int i=1; while (i <= 10) { cout << i * i << endl; ++i; }
В этом примере переменная i
внутри цикла изменяется от 1 до 10. Такая переменная,
значение которой меняется с каждым новым проходом цикла, называется счетчиком.
Заметим, что после выполнения этого фрагмента значение переменной i
будет равно 11,
поскольку именно при i==11
условие i<=10
впервые перестанет выполняться.
В следующем примере цикл используется для того, чтобы найти
количество знаков в десятичной записи целочисленной
переменной i
.
int Ndigits (int n) { int result = 0; while (n != 0) { result = result + 1; n = n / 10; } return result; }
Внутри цикла значение переменной n
уменьшается в 10 раз до тех пор, пока она не станет равна 0.
Уменьшение целочисленной переменной в 10 раз (с использованием целочисленного деления) эквивалентно отбрасыванию
последней цифры этой переменной.
while
("пока") с постусловиемЦикл "пока" с постусловием отличается от цикла с предусловием тем, что сначала выполняется блок цикла, а потом проверяется условие. Если условие истинно, то цикл будет выполнен еще раз, и так до тех пор, пока условие будет истинно. Синтаксис цикла с постусловием такой (обратите внимание на обязательную точку с запятой после условия):
do { Блок инструкций } while (условие);
Поскольку условие проверяется после выполнения тела цикла, то блок цикла с постусловием всегда будет
выполнен хотя бы один раз, независимо от истинности условия. Это может привести к ошибкам, поэтому
использовать цикл while
с постусловием следует только тогда, когда это действительно упрощает
алгоритм.
По данному числу N распечатайте все квадраты натуральных чисел, не превосходящие N, в порядке возрастания.
Ввод | Вывод |
---|---|
50 |
1 4 9 16 25 36 49 |
По данному числу N распечатайте все целые степени двойки, не превосходящие N, в порядке возрастания.
Функцией pow пользоваться нельзя!
Ввод | Вывод |
---|---|
50 |
1 2 4 8 16 32 |
Дано натуральное число N. Выведите слово YES
, если число N является
точной степенью двойки, или слово NO
в противном случае.
Решение оформите в виде функции bool IsPowerOf2 (int n)
.
Ввод | Вывод |
---|---|
8 |
YES |
3 |
NO |
По данному натуральному числу \(N\) выведите такое наименьшее целое число \(k\), что \(2^k\ge N\).
Решение оформите в виде функции int Log2 (int n)
.
Ввод | Вывод |
---|---|
7 |
3 |
В первый день спортсмен пробежал \(x\) километров, а затем он каждый день увеличивал пробег на 10% от предыдущего значения. По данному числу \(y\) определите номер дня, на который пробег спортсмена составит не менее \(y\) километров.
Программа получает на вход действительные числа \(x\) и \(y\) и должна вывести одно натуральное число.
Ввод | Вывод |
---|---|
10 20 |
9 |
Вклад в банке составляет \(x\) рублей. Ежегодно он увеличивается на \(p\) процентов и округляется до целого числа копеек по правилам арифметики. Определите, через сколько лет вклад составит не менее \(y\) рублей.
Программа получает на вход три натуральных числа: \(x\), \(p\), \(y\) и должна вывести одно целое число.
Ввод | Вывод |
---|---|
100 10 200 |
8 |
Дано натуральное число N, вычислите сумму его цифр. Решение оформите в виде функции
int SumOfDigits (int n)
.
Ввод | Вывод |
---|---|
179 |
17 |
Дано натуральное число N, вычислите количество нулей в его десятичной записи.
Решение оформите в виде функции
int NumberOfZeroes (int n)
.
Ввод | Вывод |
---|---|
10709 |
2 |
Дано натуральное число N. Определите минимальную и максимальную цифру в его десятичной записи.
Решение оформите в виде функций int MinDigit (int n)
и int MaxDigit (int n)
Ввод | Вывод |
---|---|
179 |
1 9 |
Дано натуральное число N, не заканчивающееся нулем. Получите число,
составленное из тех же цифр, но записанных в обратном порядке. Решение
оформите в виде функции int Reverse (int n)
.
Ввод | Вывод |
---|---|
179 |
971 |
Натуральное число называется палиндромом, если его десятичная запись читается одинаково как слева
направо, так и справа налево. Напишите функцию bool IsPalindrome (int n)
,
определяющую, является ли данное число палиндромом. Используя эту функцию определите
по заданному числу N количество палиндромов, не превосходящих N.
Ввод | Вывод |
---|---|
100 |
18 |
Программа получает на вход последовательность целых чисел и должна определить сумму этих чисел. Последовательность завершается числом 0, при считывании которого программа должна завершить работу и вывести результат. Числа, следующие за числом 0, считывать не нужно.
Ввод | Вывод |
---|---|
1 7 9 0 5 |
17 |
Определите среднее значение всех элементов последовательности, завершающейся числом 0.
Ввод | Вывод |
---|---|
1 |
5.66667 |
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение наибольшего элемента последовательности.
Ввод | Вывод |
---|---|
1 |
9 |
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, сколько элементов этой последовательности больше предыдущего элемента.
Ввод | Вывод |
---|---|
1 |
2 |
Последовательность состоит из натуральных чисел и завершается числом 0. Определите значение второго по величине элемента в этой последовательности, то есть элемента, который будет наибольшим, если из последовательности удалить наибольший элемент.
Ввод | Вывод |
---|---|
1 |
7 |
1 |
2 |
Последовательность состоит из натуральных чисел и завершается числом 0. Определите, какое количество элементов этой последовательности, равны ее наибольшему элементу.
Ввод | Вывод |
---|---|
1 |
1 |
1 |
2 |
Найдите сумму последовательности натуральных чисел, если признаком окончания конца последовательности
является два подряд идущих числа 0
.
Ввод | Вывод |
---|---|
1 |
17 |
Последовательность Фибоначчи определяется так: \[ \varphi_0=0, \varphi_1=1, ..., \varphi_{n}=\varphi_{n-1}+\varphi_{n-2}. \]
По данному числу \(n\) определите \(n\)-е число Фибоначчи \(\varphi_n\).
Ввод | Вывод |
---|---|
6 |
8 |
Дано натуральное число \(A\). Определите, каким по счету числом Фибоначчи оно является, то есть выведите такое число \(n\), что \(\varphi_n=A\). Если \(А\) не является числом Фибоначчи, выведите число -1.
Ввод | Вывод |
---|---|
8 |
6 |
10 |
-1 |
Исполнитель “Раздвоитель” преобразует натуральные числа. У него есть две команды: “Вычесть 1” и “Разделить на 2”, первая команда уменьшает число на 1, вторая команда уменьшает число в два раза, если оно чётное, иначе происходит ошибка.
Дано два натуральных числа A и B (A>B). Напишите алгоритм для Развоителя, который преобразует
число A в число B и при этом содержит минимальное число команд. Команды алгоритма нужно выводить по
одной в строке, первая команда обозначается, как -1
, вторая команда как :2
.
Ввод | Вывод |
---|---|
179 |
-1 |
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите, какое наибольшее число подряд идущих элементов этой последовательности равны друг другу.
Ввод | Вывод |
---|---|
1 |
2 |
Дана последовательность натуральных чисел, завершающаяся число 0. Определите наибольшую длину монотонного фрагмента последовательности (то есть такого фрагмента, где все элементы либо больше предыдущего, либо меньше).
Ввод | Вывод |
---|---|
1 |
2 |
Элемент последовательности называется локальным максимумом, если он строго больше предыдущего и последующего элемента последовательности. Первый и последний элемент последовательности не являются локальными максимумами.
Дана последовательность натуральных чисел, завершающаяся числом 0. Определите количество строгих локальных максимумов в этой последовательности.
Ввод | Вывод |
---|---|
1 |
2 |
Определите наименьшее расстояние между двумя локальными максимумами последовательности натуральных чисел, завершающейся числом 0. Если в последовательности нет двух локальных максимумов, выведите число 0.
Ввод | Вывод |
---|---|
1 |
2 |
1 |
0 |
Дана последовательность натуральных чисел \(x_1\), \(x_2\), ..., \(x_n\). Стандартным отклонением называется величина \[ \sigma = \sqrt{\frac{(x_1-s)^2+(x_2-s)^2+\ldots+(x_n-s)^2}{n-1}} \] где \(s=\frac{x_1+x_2+\ldots+x_n}{n}\) — среднее арифметическое последовательности.
Определите стандартное отклонение для данной последовательности натуральных чисел, завершающейся числом 0.