Очень часто возникает необходимость выполнить одну и ту же последовательность
действий несколько раз: например, для вычисления выражения \( a^n \) необходимо
выполнить \( n-1 \) раз умножение на величину \( a \).
Для этого используются циклы. В данном листочке речь пойдет о цикле for,
который, как правило, используется для повторения определенной последовательности действий
заданное количество раз.
Рассмотрим задачу вычисления суммы всех натуральных чисел от 1 до n.
Для этого заведем переменную Sum и к ней будем прибавлять значение переменной
i, где i будет принимать все значения от 1 до n.
На языке C++ это можно сделать при помощи цикла for следующим образом:
int n, Sum, i;
cin >> n;
Sum = 0;
for (i = 1; i <= n; ++i)
{
Sum = Sum + i;
}
cout << Sum << endl;
В этом примере последовательность инструкций в блоке, то есть инструкция s = s + i
будет выполнена многократно для всех значений переменной i от 1 до n,
то есть в результате переменная s будет равна сумме всех натуральных чисел
от 1 до n.
При использовании цикла for необходимо задать три выражения-параметра
(в круглых скобках через точку с запятой).
Первый параметр – начальное значение переменной, задается в виде
присваивания переменной значения, в нашем случае – i = 1.
Более формально — первый параметр содержит произвольное выражение, которое вычисляется один
до выполнения тела цикла, и как правило первый параметр используется для инициализации переменной цикла.
Первый параметр может отсутствовать, тогда вместо него ничего не пишется, а просто ставится точка с запятой.
Второй параметр – конечное значение переменной, задается в виде условия на значение
переменной, в нашем случае условие i <= n означает,
что переменная i будет принимать значения до n включительно.
Более формально — второй параметр содержит произвольное выражение. Цикл будет исполняться,
пока значение второго параметра истинно (или ненулевое, если это — целочисленное выражение).
Третий параметр – шаг изменения переменной. Запись ++i
равнозначна записи i = i + 1 и
означает, что переменная i будет увеличиваться на 1 с каждым новым исполнением цикла,
запись --i равнозначна записи i = i - 1 и
означает, что переменная i будет уменьшатся на 1.
Более формально, третий параметр — это произвольное выражение, которые вычисляется после выполнения
тела цикла, но до проверки условия его окончания. Как правило, в третьем параметре изменяется значение переменной,
записанной в первых двух параметрах. Если хочется, чтобы значение переменной в цикле менялось не на 1, а на большую величину, то это можно сделать, например, так:
i = i + 2 или i = i - 3.
В нашем примере мы могли бы сделать цикл, в котором переменная i принимала бы все значения от n
до 1, уменьшаясь при этом:
for (i = n; i > 0; --i)
Даны два целых числа \( A \) и \( B \) (при этом \( A≤B \)). Выведите все числа от \( A \) до \( B \) включительно, разделяя их пробелом. После последнего числа тоже можно вывести пробел.
| Ввод | Вывод |
|---|---|
1 |
1 2 3 4 5 |
Даны два целых числа \( A \) и \( B \). Выведите все числа от \( A \) до \( B \) включительно, в порядке возрастания, если \( A < B \), или в порядке убывания в противном случае.
| Ввод | Вывод |
|---|---|
5 |
5 4 3 2 1 |
По данному натуральном \( n \) вычислите сумму \(1^3+2^3+3^3+\cdots+n^3\).
| Ввод | Вывод |
|---|---|
3 |
36 |
По данному натуральному \(n\) вычислите сумму \( 1\times 2 + 2\times 3 +\cdots + (n-1)\times n \).
| Ввод | Вывод |
|---|---|
4 |
20 |
2 |
2 |
По данному целому неотрицательному \(n\) вычислите значение \(2^n\).
| Ввод | Вывод |
|---|---|
10 |
1024 |
По данному целому неотрицательному \(n\) вычислите значение \(n!\)
| Ввод | Вывод |
|---|---|
5 |
120 |
По данным двум натуральным числам \(A\) и \(B\) (\(A≤B\)) выведите все чётные числа на отрезке от \(A\) до \(B\).
В этой задаче нельзя использовать инструкцию if.
| Ввод | Вывод |
|---|---|
1 |
2 4 6 8 10 |
Дано натуральное число \(n\). Напечатайте все \(n\)-значные нечетные натуральные числа в порядке убывания.
| Ввод | Вывод |
|---|---|
1 |
9 7 5 3 1 |
Дано девятизначное число. Выведите все цифры этого числа в обратном порядке по одной, разделяя пробелами.
| Ввод | Вывод |
|---|---|
123456789 |
9 8 7 6 5 4 3 2 1 |
По данному натуральному \(n≥2\) вычислите сумму \(1\times 2+2\times 3+\cdots +(n-1)\times n\). Ответ выведите в виде вычисленного выражение и его значения в точности, как показано в примере.
В этой задаче нельзя использовать if.
| Ввод | Вывод |
|---|---|
4 |
1*2+2*3+3*4=20 |
2 |
1*2=2 |
Напишите программу, которая по данному числу \(n\) от 1 до 9 выводит на экран \(n\) флагов. Изображение одного флага имеет размер \(4\times 4\) символов, между двумя соседними флагами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего флага и вообще допускается вывод пробелов в конце строк. Внутри каждого флага должен быть записан его номер — число от 1 до n.
Символ обратного слэша “\” в текстовых строках
имеет специальное значение. Чтобы включить в состав текстовой
строки такой символ, его нужно повторить дважды. Например,
для вывода на экран одного такого символа можно использовать
такой код: cout <<"\\";.
| Ввод | Вывод |
|---|---|
3 |
+___ +___ +___ |
1 |
+___ |
По данному натуральному числу \(n\le 1000\) выведите все натуральные делители числа \(n\) в порядке возрастания.
| Ввод | Вывод |
|---|---|
10 |
1 2 5 10 |
Дано 10 целых чисел. Вычислите их сумму. В решении можно использовать только три переменные.
| Ввод | Вывод |
|---|---|
0 |
45 |
Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел \(N\), затем вводится ровно \(N\) целых чисел. Какое наименьшее число переменных нужно для решения этой задачи?
| Ввод | Вывод |
|---|---|
3 |
321 |
Дано \(N\) чисел: сначала вводится число \(N\), затем вводится ровно \(N\) целых чисел. Подсчитайте количество нулей среди введенных чисел и выведите это количество.
| Ввод | Вывод |
|---|---|
5 |
2 |
Найдите и выведите все двузначные числа, которые равны удвоенному произведению своих цифр.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
Дано натуральное число \(n\). Выведите в порядке возрастания все трехзначные числа, сумма цифр которых равна \(n\).
| Ввод | Вывод |
|---|---|
3 |
102 |
По данному натуральному \(n≤9\) выведите лесенку из \(n\) ступенек, \(i\)-я ступенька состоит из чисел от 1 до \(i\) без пробелов.
| Ввод | Вывод |
|---|---|
3 |
1 |
Даны два четырёхзначных числа \(A\) и \(B\). Выведите все четырёхзначные числа на отрезке от \(A\) до \(B\), запись которых является палиндромом.
| Ввод | Вывод |
|---|---|
1600 |
1661 |
Даны два четырёхзначных числа \(A\) и \(B\). Выведите в порядке возрастания все четырёхзначные числа на отрезке от \(A\) до \(B\), запись которых содержит ровно три одинаковые цифры.
| Ввод | Вывод |
|---|---|
1900 |
1911 |
По данным числам \(n\) и \(m\) выведите изображение волейбольной сетки, содержащей \(n\) ячеек по вертикали и \(m\) ячеек по горизонтали.
В узлах сетки стоят знаки “+”, по вертикали они соединены
одним знаком “|”, а по горизонтали — двумя знаками
“-”.
| Ввод | Вывод |
|---|---|
2 3 |
+--+--+--+ |
1 1 |
+--+ |
По данному натуральном \(n\) вычислите сумму \(1! + 2! + 3! +\cdots + n!\). В решении этой задачи можно использовать только один цикл.
| Ввод | Вывод |
|---|---|
3 |
9 |
Рассмотрим \(N\)-домино. В таком домино каждая костяшка состоит из двух половинок, на каждой из которых нарисовано от 0 до \(N\) точек. Полный комплект костяшек такого домино содержит все возможные костяшки, каждую по одному разу. Например, для \(N=2\) в комплект войдут следующие костяшки: \((0,0)\), \((0,1)\), \((0,2)\), \((1,1)\), \((1,2)\) и \((2,2)\). По заданному \(N\) (\(1\le N \le 30\)) определите, сколько всего точек изображено на всех костяшках полного комплекта \(N\)-домино.
| Ввод | Вывод |
|---|---|
2 |
12 |
Дана монотонная последовательность, в которой каждое натуральное число \(k\) встречается ровно \(k\) раз: \(1, 2, 2, 3, 3, 3, 4, 4, 4, 4, \ldots\)
По данному натуральному \(n\) выведите первые \(n\) членов этой последовательности.
Решите задачу при помощи одного цикла for.
| Ввод | Вывод |
|---|---|
2 |
1 2 |
5 |
1 2 2 3 3 |
Даны целые неотрицательные числа \(a\), \(b\), \(c\), \(d\), при этом \(0≤c<d\). Выведите в порядке возрастания все числа от \(a\) до \(b\), которые дают остаток \(c\) при делении на \(d\).
В этой задаче нельзя использовать инструкцию if, операторы сравнения
(< и т.д., кроме как для задания цикла i <= b), должен быть только один цикл.
| Ввод | Вывод |
|---|---|
1 |
1 3 |
1 |
4 |
Необходимо заказать транспорт для перевозки \(N\) человек. Заказывать можно автобусы и такси. В каждый автобус можно посадить не более 50 человек, в каждое такси — не более 4 человек. Стоимость заказа автобуса составляет \(A\) рублей, такси — \(B\) рублей (разумеется, \(A \gt B\)).
Определите, какое количество автобусов и такси нужно заказать, чтобы потратить как можно меньшую сумму денег.
Программа получает на вход три целых числа: \(N\), \(A\), \(B\) (\(1 \le N \le 10^5\), \(1 \le B \lt A \le 1000\)).
Выведите два числа — количество автобусов и количество такси для заказа в оптимальном случае. Если возможных ответов несколько, выведите любой.
| Ввод | Вывод |
|---|---|
4 |
0 1 |
Бригада скорой помощи выехала по вызову в один из отделенных районов. К сожалению, когда диспетчер получил вызов, он успел записать только адрес дома и номер квартиры \(K_1\), а затем связь прервалась. Однако он вспомнил, что по этому же адресу дома некоторое время назад скорая помощь выезжала в квартиру \(K_2\), которая расположена в подъезде \(P_2\) на этаже \(N_2\). Известно, что в доме \(M\) этажей и количество квартир на каждой лестничной площадке одинаково. Напишите программу, которая вычилсяет номер подъезда \(P_1\) и номер этажа \(N_1\) квартиры \(K_1\).
Программа получает на вход пять положительных целых чисел \(K_1\), \(M\), \(K_2\), \(P_2\), \(N_2\). Все числа не превосходят 1000.
Выведите два числа \(P_1\) и \(N_1\). Если входные данные не позволяют однозначно определить \(P_1\) или \(N_1\), вместо соответствующего числа напечатайте 0. Если входные данные противоречивы, напечатайте два числа −1 (минус один).
| Ввод | Вывод |
|---|---|
89 |
2 3 |
11 |
0 1 |
3 |
-1 -1 |