Цикл for

Очень часто возникает необходимость выполнить одну и ту же последовательность действий несколько раз: например, для вычисления выражения \( 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: Ряд - 1

Даны два целых числа \( A \) и \( B \) (при этом \( A≤B \)). Выведите все числа от \( A \) до \( B \) включительно, разделяя их пробелом. После последнего числа тоже можно вывести пробел.

Ввод Вывод
1
5
1 2 3 4 5

B: Ряд - 2

Даны два целых числа \( A \) и \( B \). Выведите все числа от \( A \) до \( B \) включительно, в порядке возрастания, если \( A < B \), или в порядке убывания в противном случае.

Ввод Вывод
5
1
5 4 3 2 1

C: Сумма кубов

По данному натуральном \( n \) вычислите сумму \(1^3+2^3+3^3+\cdots+n^3\).

Ввод Вывод
3
36

D: Сумма произведений соседних чисел

По данному натуральному \(n\) вычислите сумму \( 1\times 2 + 2\times 3 +\cdots + (n-1)\times n \).

Ввод Вывод
4
20
2
2

E: Степень двойки

По данному целому неотрицательному \(n\) вычислите значение \(2^n\).

Ввод Вывод
10
1024

F: Факториал

По данному целому неотрицательному \(n\) вычислите значение \(n!\)

Ввод Вывод
5
120

G: Четные числа

По данным двум натуральным числам \(A\) и \(B\) (\(A≤B\)) выведите все чётные числа на отрезке от \(A\) до \(B\). В этой задаче нельзя использовать инструкцию if.

Ввод Вывод
1
10
2 4 6 8 10

H: Ряд - 3

Дано натуральное число \(n\). Напечатайте все \(n\)-значные нечетные натуральные числа в порядке убывания.

Ввод Вывод
1
9 7 5 3 1

I: Цифры числа

Дано девятизначное число. Выведите все цифры этого числа в обратном порядке по одной, разделяя пробелами.

Ввод Вывод
123456789
9 8 7 6 5 4 3 2 1

J: Сумма произведений соседних чисел - 2

По данному натуральному \(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

K: Флаги

Напишите программу, которая по данному числу \(n\) от 1 до 9 выводит на экран \(n\) флагов. Изображение одного флага имеет размер \(4\times 4\) символов, между двумя соседними флагами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего флага и вообще допускается вывод пробелов в конце строк. Внутри каждого флага должен быть записан его номер — число от 1 до n.

Символ обратного слэша “\” в текстовых строках имеет специальное значение. Чтобы включить в состав текстовой строки такой символ, его нужно повторить дважды. Например, для вывода на экран одного такого символа можно использовать такой код: cout  <<"\\";.

Ввод Вывод
3
+___ +___ +___ 
|1 / |2 / |3 / 
|__\ |__\ |__\ 
|    |    |    
1
+___
|1 /
|__\
|   

L: Делители

По данному натуральному числу \(n\le 1000\) выведите все натуральные делители числа \(n\) в порядке возрастания.

Ввод Вывод
10
1 2 5 10

M: Сумма десяти чисел

Дано 10 целых чисел. Вычислите их сумму. В решении можно использовать только три переменные.

Ввод Вывод
0
1
2
3
4
5
6
7
8
9
45

N: Сумма N чисел

Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел \(N\), затем вводится ровно \(N\) целых чисел. Какое наименьшее число переменных нужно для решения этой задачи?

Ввод Вывод
3
1
20
300
321

O: Количество нулей

Дано \(N\) чисел: сначала вводится число \(N\), затем вводится ровно \(N\) целых чисел. Подсчитайте количество нулей среди введенных чисел и выведите это количество.

Ввод Вывод
5
0
7
0
2
2
2

P: Замечательные числа - 1

Найдите и выведите все двузначные числа, которые равны удвоенному произведению своих цифр.

Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.

Q: Замечательные числа - 2

Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа.

Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.

R: Замечательные числа - 3

Дано натуральное число \(n\). Выведите в порядке возрастания все трехзначные числа, сумма цифр которых равна \(n\).

Ввод Вывод
3
102
111
120
201
210
300

S: Лесенка

По данному натуральному \(n≤9\) выведите лесенку из \(n\) ступенек, \(i\)-я ступенька состоит из чисел от 1 до \(i\) без пробелов.

Ввод Вывод
3
1
12
123

T: Замечательные числа - 4

Даны два четырёхзначных числа \(A\) и \(B\). Выведите все четырёхзначные числа на отрезке от \(A\) до \(B\), запись которых является палиндромом.

Ввод Вывод
1600
2100
1661
1771
1881
1991
2002

U: Замечательные числа - 5

Даны два четырёхзначных числа \(A\) и \(B\). Выведите в порядке возрастания все четырёхзначные числа на отрезке от \(A\) до \(B\), запись которых содержит ровно три одинаковые цифры.

Ввод Вывод
1900
2100
1911
1999
2000
2022

V: Волейбольная сетка

По данным числам \(n\) и \(m\) выведите изображение волейбольной сетки, содержащей \(n\) ячеек по вертикали и \(m\) ячеек по горизонтали.

В узлах сетки стоят знаки “+”, по вертикали они соединены одним знаком “|”, а по горизонтали — двумя знаками “-”.

Ввод Вывод
2 3
+--+--+--+
|  |  |  |
+--+--+--+
|  |  |  |
+--+--+--+
1 1
+--+
|  |
+--+

W: Сумма факториалов

По данному натуральном \(n\) вычислите сумму \(1! + 2! + 3! +\cdots + n!\). В решении этой задачи можно использовать только один цикл.

Ввод Вывод
3
9

X: Домино

Рассмотрим \(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

Y: Треугольная последовательность

Дана монотонная последовательность, в которой каждое натуральное число \(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

Z: Остатки

Даны целые неотрицательные числа \(a\), \(b\), \(c\), \(d\), при этом \(0≤c<d\). Выведите в порядке возрастания все числа от \(a\) до \(b\), которые дают остаток \(c\) при делении на \(d\).

В этой задаче нельзя использовать инструкцию if, операторы сравнения (< и т.д., кроме как для задания цикла i <= b), должен быть только один цикл.

Ввод Вывод
1
4
1
2
1 3
1
5
0
4
4

ZA: Транспортные расходы

Необходимо заказать транспорт для перевозки \(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
3
2
0 1

ZB: Скорая помощь

Бригада скорой помощи выехала по вызову в один из отделенных районов. К сожалению, когда диспетчер получил вызов, он успел записать только адрес дома и номер квартиры \(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
20
41
1
11
2 3
11
1
1
1
1
0 1
3
2
2
2
1
-1 -1