Очень часто возникает необходимость выполнить одну и ту же последовательность
действий несколько раз: например, для вычисления выражения 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 и B (при этом A≤B). Выведите все числа от A до B включительно.
По данному натуральном n вычислите сумму 12+22+...+n2.
По данному натуральном n вычислите сумму 13+23+...+n3.
По данному целому неотрицательному n вычислите значение n!.
По данным целым неотрицательным n и k вычислите значение числа сочетаний из n элементов по k, то есть n!/(k!(n-k)!).
По данному целому неотрицательному n вычислите значение 2n.
Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n пингвинов. Изображение одного пингвина имеет размер 5×9 символов, между двумя соседними пингвинами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего пингвина. Для упрощения рисования скопируйте пингвина из примера в среду разработки.
Учтите, что вывод данных на экран производится построчно, а не попингвинно.
Символ обратного слэша “\” в текстовых строках
имеет специальное значение. Чтобы включить в состав текстовой
строки такой символ, его нужно повторить дважды. Например,
для вывода на экран одного такого символа можно использовать
такой код: cout << "\\";.
| Ввод | Вывод |
|---|---|
3 |
_~_ _~_ _~_ |
1 |
_~_ |
Напишите программу, которая по данному числу n от 1 до 9 выводит на экран n флагов. Изображение одного флага имеет размер 4×4 символов, между двумя соседними флагами также имеется пустой (из пробелов) столбец. Разрешается вывести пустой столбец после последнего флага. Внутри каждого флага должен быть записан его номер — число от 1 до n.
| Ввод | Вывод |
|---|---|
3 |
+___ +___ +___ |
1 |
+___ |
По данному натуральному n≥2 вычислите сумму 1×2+2×3+...+(n-1)×n. Ответ выведите в виде вычисленного выражение и его значения в точности, как показано в примере.
| Ввод | Вывод |
|---|---|
4 |
1*2+2*3+3*4=20 |
2 |
1*2=2 |
По данным двум натуральным числам A и B выведите все чётные числа на отрезке от A до B. В этой задаче нельзя использовать инструкцию if, переменная в цикле должна увеличиваться с шагом 2.
| Ввод | Вывод |
|---|---|
1 10 |
2 4 6 8 10 |
Дано 10 целых чисел. Вычислите их сумму. Какое наименьшее число переменных нужно для решения этой задачи?
| Ввод | Вывод |
|---|---|
0 1 2 3 4 5 6 7 8 9 |
45 |
Дано несколько чисел. Вычислите их сумму. Сначала вводите количество чисел N, затем вводится ровно N целых чисел. Какое наименьшее число переменных нужно для решения этой задачи?
| Ввод | Вывод |
|---|---|
3 |
321 |
Дано N чисел: сначала вводится число N, затем вводится ровно N целых чисел. Подсчитайте количество нулей среди введенных чисел и выведите это количество.
| Ввод | Вывод |
|---|---|
5 |
2 |
Даны числа a, b, c, d. Выведите в порядке возрастания все целые числа от 0 до 1000, которые являются корнями уравнения ax3+bx2+cx+d=0.
| Ввод | Вывод |
|---|---|
-1 1 -1 1 |
1 |
1 1 1 1 |
Даны числа 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 |
Найдите и выведите все двузначные числа, которые равны удвоенному произведению своих цифр.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
Квадрат трехзначного числа оканчивается тремя цифрами, равными этому числу. Найдите и выведите все такие числа.
Программа не требует ввода данных с клавиатуры, просто выводит список искомых чисел.
Дано натуральное число n. Выведите в порядке возрастания все трехзначные числа, сумма цифр которых равна n.
| Ввод | Вывод |
|---|---|
3 |
102 |
По данному n выведите изображение лесенки, содержащей n ступенек.
| Ввод | Вывод |
|---|---|
3 |
* |
По данным числам n и m выведите изображение волейбольной сетки, содержащей n ячеек по вертикали и m ячеек по горизонтали.
В узлах сетки стоят знаки “+”, по вертикали они соединены одним знаком “|”, а по горизонтали — двумя знаками “-”.
| Ввод | Вывод |
|---|---|
2 3 |
+--+--+--+ |
1 1 |
+--+ |
Даны два четырёхзначных числа A и B. Выведите все четырёхзначные числа на отрезке от A до B, запись которых является палиндромом.
| Ввод | Вывод |
|---|---|
1600 |
1661 |
Даны два четырёхзначных числа A и B. Выведите в порядке возрастания все четырёхзначные числа на отрезке от A до B, запись которых содержит ровно три одинаковые цифры.
| Ввод | Вывод |
|---|---|
1900 |
1911 |
Даны целые неотрицательные числа a, b, c, d, при этом 0≤c<d. Выведите в порядке возрастания все числа от a до b, которые дают остаток c при делении на d.
В этой задаче нельзя использовать инструкцию if.
| Ввод | Вывод |
|---|---|
1 4 1 2 |
1 3 |
1 5 0 4 |
4 |
По данному натуральном n вычислите сумму 1!+2!+3!+...+n!. В решении этой задачи можно использовать только один цикл.
Дана монотонная последовательность, в которой каждое натуральное число k встречается ровно k раз: 1, 2, 2, 3, 3, 3, 4, 4, 4, 4, ...
По данному натуральному n выведите первые n членов этой последовательности. Попробуйте обойтись только одним циклом for.
| Ввод | Вывод |
|---|---|
2 |
1 2 |
5 |
1 2 2 3 3 |
Для настольной игры используются карточки с номерами от 1 до N. Одна карточка потерялась. Найдите ее, зная номера оставшихся карточек.
Дано число N, далее N-1 номер оставшихся карточек (различные числа от 1 до N). Программа должна вывести номер потерянной карточки.
Для самых умных – массивами и аналогичными структурами данных пользоваться нельзя.
| Ввод | Вывод |
|---|---|
5 |
5 |
4 |
1 |