Цикл for

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

Даны два целых числа A и B (при этом A≤B). Выведите все числа от A до B включительно.

B: Сумма квадратов

По данному натуральном n вычислите сумму 12+22+...+n2.

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

По данному натуральном n вычислите сумму 13+23+...+n3.

D: Факториал

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

E: Число сочетаний

По данным целым неотрицательным n и k вычислите значение числа сочетаний из n элементов по k, то есть n!/(k!(n-k)!).

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

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

G: Пингвины

Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n пингвинов. Изображение одного пингвина имеет размер 5×9 символов, между двумя соседними пингвинами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего пингвина. Для упрощения рисования скопируйте пингвина из примера в среду разработки.

Учтите, что вывод данных на экран производится построчно, а не попингвинно.

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

Пример

Ввод Вывод
3
   _~_       _~_       _~_    
  (o o)     (o o)     (o o)   
 /  V  \   /  V  \   /  V  \  
/(  _  )\ /(  _  )\ /(  _  )\ 
  ^^ ^^     ^^ ^^     ^^ ^^   
1
   _~_   
  (o o)  
 /  V  \ 
/(  _  )\
  ^^ ^^  

H: Флаги

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

Пример

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

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

По данному натуральному n≥2 вычислите сумму 1×2+2×3+...+(n-1)×n. Ответ выведите в виде вычисленного выражение и его значения в точности, как показано в примере.

Пример

Ввод Вывод
4
1*2+2*3+3*4=20
2
1*2=2

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

По данным двум натуральным числам A и B выведите все чётные числа на отрезке от A до B. В этой задаче нельзя использовать инструкцию if, переменная в цикле должна увеличиваться с шагом 2.

Пример

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

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

Дано 10 целых чисел. Вычислите их сумму. Какое наименьшее число переменных нужно для решения этой задачи?

Пример

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

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

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

Пример

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

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

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

Пример

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

N: Диофантово уравнение - 1

Даны числа a, b, c, d. Выведите в порядке возрастания все целые числа от 0 до 1000, которые являются корнями уравнения ax3+bx2+cx+d=0.

Пример

Ввод Вывод
-1 1 -1 1
1
1 1 1 1
 

O: Диофантово уравнение - 2

Даны числа a, b, c, d, e. Подсчитайте количество таких целых чисел от 0 до 1000, которые являются корнями уравнения (ax3+bx2+cx+d)/(x-e)=0, и выведите их количество.

Пример

Ввод Вывод
1 -2 1 0 1
1
1 1 1 1 1
0

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

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

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

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

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

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

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

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

Пример

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

S: Лесенка

По данному n выведите изображение лесенки, содержащей n ступенек.

Пример

Ввод Вывод
3
*
**
***

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

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

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

Пример

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

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

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

Пример

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

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

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

Пример

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

W: Остатки

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

В этой задаче нельзя использовать инструкцию if.

Пример

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

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

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

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

Дана монотонная последовательность, в которой каждое натуральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...

По данному натуральному n выведите первые n членов этой последовательности. Попробуйте обойтись только одним циклом for.

Пример

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

Z: Потерянная карточка

Для настольной игры используются карточки с номерами от 1 до N. Одна карточка потерялась. Найдите ее, зная номера оставшихся карточек.

Дано число N, далее N-1 номер оставшихся карточек (различные числа от 1 до N). Программа должна вывести номер потерянной карточки.

Для самых умных – массивами и аналогичными структурами данных пользоваться нельзя.

Пример

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