Цикл 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: Ряд - 1

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

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

B: Ряд - 2

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

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

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

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

Известную из курса анализа формулу использовать нельзя.

Ввод Вывод
3
14

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

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

Известную из курса анализа формулу использовать нельзя.

Ввод Вывод
3
36

E: Факториал

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

Ввод Вывод
5
120

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

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

Ввод Вывод
10
1024

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) выведите все чётные числа на отрезке от A до B. В этой задаче нельзя использовать инструкцию if.

Ввод Вывод
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≤9 выведите лесенку из n ступенек, i-я ступенька состоит из чисел от 1 до i без пробелов.

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

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!\). В решении этой задачи можно использовать только один цикл.

Ввод Вывод
3
9

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