Циклы : For - Язык программирования C++ для спортивного программирования
Циклы : For
Циклы : For
Введение: общая идея цикла for
Цикл for используется тогда, когда мы хотим повторить одно и то же действие несколько раз. Вместо того чтобы писать много похожих строк кода, мы записываем действие один раз и объясняем C++, как должно работать повторение.
Например, если мы хотим вывести числа от 1 до 10, не нужно писать десять отдельных строк вывода. Достаточно одного цикла:
Это выведет: 12345678910
Главная идея проста: у цикла есть переменная, которую обычно называют i, и эта переменная меняется после каждого повторения. По мы понимаем, какой шаг цикла выполняется сейчас.
i
Основная идея: как работает for
Общий вид цикла for такой:
Здесь есть четыре важные части:
<начало> готовит цикл перед его запуском.
<условие> проверяется перед каждым повторением.
<шаг> меняет переменную цикла после каждого повторения.
<тело> — это код, который мы хотим повторять.
Посмотрим на тот же пример ещё раз:
Вот что означает каждая часть:
<начало> — это i=1. Мы создаём переменную i и начинаем её с 1.
<условие> — это i≤10. Цикл продолжается, пока это условие истинно.
<шаг> — это i=i+1. После каждого повторения i увеличивается на 1.
<тело> — это команда вывода. Она печатает текущее значение i.
Цикл работает в таком порядке:
Чтобы ясно увидеть каждую часть, полезно записать заголовок цикла for в несколько строк:
Теперь мы полностью проследим работу цикла. На каждом повторении каждая часть цикла получает свой отдельный шаг.
Четыре части цикла `for`, полная трассировка
C++
код · C++строка 2
1for (
2 int i = 1; // <начало>
3 i <= 10; // <условие>
4 i = i + 1 // <шаг>
5) {
6 cout << i << ' '; // <тело>
7}
Выполняем <начало>
L2
Часть <начало> выполняется один раз, до первого повторения.
инв
Порядок всегда такой: <начало>, <условие>, <тело>, <шаг>, затем снова <условие>.
Цикл for может идти и в обратную сторону. Если мы хотим вывести числа от 10 до 1, можно начать с 10 и уменьшать i:
Это выведет: 10987654321
Значит, цикл for нужен не только для счёта вверх. Мы выбираем начальное значение, условие и шаг в зависимости от задачи.
Примеры
Пример 1: вывести числа от 1 до n
Дано одно целое число n. Выведите все числа от 1 до n.
Пример:
Разбор и решение
Нужно вывести числа в возрастающем порядке. Первое число — 1, последнее — n, а каждое следующее больше предыдущего на 1.
Значит, цикл должен начинаться с i=1, продолжаться, пока i≤n, и изменяться как i=i+1.
Алгоритм:
Реализация:
Пример 2: вывести нечётные числа от 1 до n
Дано одно целое число n. Выведите все нечётные числа от 1 до n.
Пример:
Разбор и решение
Нечётные числа — это 1,3,5,7,…. Каждое следующее нечётное число больше предыдущего на 2.
Поэтому мы начинаем с 1, продолжаем, пока i≤n, и изменяем i как i=i+2.
Алгоритм:
Реализация:
Пример 3: сумма чисел от 1 до n
Дано одно целое число n. Найдите сумму всех чисел от 1 до n.
Пример:
Потому что 1+2+3+4+5=15.
Разбор и решение
На этот раз мы не выводим каждое число. Мы храним переменную sum, в которой лежит накопленный ответ.
В начале sum=0. Затем цикл проходит по всем значениям i от 1 до n. На каждом шаге мы добавляем текущее i к sum.
Алгоритм:
Реализация:
Мы используем longlong для sum, потому что при больших n ответ может стать очень большим.
Пример 4: вывести число несколько раз
Даны два целых числа x и k. Выведите число x ровно k раз.
Пример:
Разбор и решение
Здесь переменная цикла нужна только для того, чтобы считать повторения. Это не то значение, которое мы выводим.
Мы запускаем цикл от 1 до k. На каждом шаге выводим x.
Алгоритм:
Реализация:
Этот пример важен, потому что он показывает: переменную цикла не обязательно выводить. Иногда она только управляет тем, сколько раз выполняется цикл.
Пример 5: обратный отсчёт
Дано одно целое число n. Выведите числа от n до 1.
Пример:
Разбор и решение
Теперь числа идут в убывающем порядке. Цикл должен начинаться с n, продолжаться, пока i≥1, и изменяться как i=i−1.
Алгоритм:
Реализация:
for(int i = 1; i <= 10; i = i + 1){ cout << i << ' ';}
1. Выполнить начало один раз.
2. Проверить условие.
3. Если условие ложно, остановить цикл.
4. Если условие истинно, выполнить тело.
5. Выполнить шаг.
6. Вернуться к пункту 2.
i = 1 -> условие истинно -> вывести 1
i = 2 -> условие истинно -> вывести 2
i = 3 -> условие истинно -> вывести 3
...
i = 10 -> условие истинно -> вывести 10
i = 11 -> условие ложно -> стоп
i = 1 -> вывести 1
i = 3 -> вывести 3
i = 5 -> вывести 5
i = 7 -> вывести 7
i = 9 -> вывести 9
i = 11 -> условие ложно, стоп
Ввод:
5
Вывод:
1 2 3 4 5
1. Прочитать n.
2. Для i от 1 до n:
1. Вывести i.
Ввод:
10
Вывод:
1 3 5 7 9
1. Прочитать n.
2. Для i от 1 до n с шагом 2:
1. Вывести i.
Ввод:
5
Вывод:
15
1. Прочитать n.
2. Положить sum = 0.
3. Для i от 1 до n:
1. Добавить i к sum.
4. Вывести sum.
Ввод:
7 4
Вывод:
7 7 7 7
1. Прочитать x и k.
2. Для cnt от 1 до k:
1. Вывести x.
Ввод:
5
Вывод:
5 4 3 2 1
1. Прочитать n.
2. Для i от n до 1:
1. Вывести i.
for(<начало>;<условие>;<шаг>){<тело>}
for(int i = 1; i <= 10; i = i + 1){ cout << i << ' ';}
for( int i = 1; // <начало> i <= 10; // <условие> i = i + 1 // <шаг>){ cout << i << ' '; // <тело>}
for(int i = 1; i <= 10; i = i + 2){ cout << i << ' ';}
for(int i = 10; i >= 1; i = i - 1){ cout << i << ' ';}
#include <bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; for(int i = 1; i <= n; i = i + 1){ cout << i << ' ';} return 0;}
#include <bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; for(int i = 1; i <= n; i = i + 2){ cout << i << ' ';} return 0;}
#include <bits/stdc++.h>using namespace std;int main(){ int n; cin >> n; long long sum = 0; for(int i = 1; i <= n; i = i + 1){ sum = sum + i;} cout << sum << endl; return 0;}