Задание 12 ОГЭ: как найти значение переменной после вложенного цикла?
В одном из заданий ОГЭ дали программу с вложенным циклом (цикл внутри цикла) и просят финальное значение переменной. Как трассировать вложенный цикл на Python, чтобы не запутаться в счётчиках? У меня от двух циклов сразу каша в голове.
2 ответа
Вложенные циклы пугают, но разбираются по простому правилу: внутренний цикл прокручивается полностью на КАЖДОМ шаге внешнего.
Пример на Python:
s = 0
for i in range(1, 4): # i = 1, 2, 3
for j in range(1, 4): # j = 1, 2, 3
s = s + 1
print(s)
Внешний цикл идёт 3 раза, и на каждом внутренний делает 3 шага. Значит тело s = s + 1 выполнится 3 × 3 = 9 раз, ответ — 9.
Если внутри есть условие — считайте аккуратнее. Трассируйте таблицей: столбцы i, j и переменная-накопитель.
s = 0
for i in range(1, 4):
for j in range(1, 4):
if i + j == 4:
s = s + 1
print(s)
Пары (i, j), где i+j=4: (1,3), (2,2), (3,1) → s = 3.
Алгоритм трассировки:
- Зафиксируйте i = первое значение.
- Прокрутите j по всему диапазону, обновляя переменную.
- Возьмите следующее i и снова прокрутите весь внутренний цикл.
- Считайте до конца внешнего цикла.
Частая ошибка: считают, что внутренний цикл идёт один раз на всю программу. Нет — он перезапускается на каждом значении внешнего. И помните про range: правая граница не входит.
Если в уме сложно — оцените сначала число повторений тела (произведение длин циклов), это часто и есть ответ при простом s = s + 1.
Для внешнего цикла длиной A и внутреннего длиной B тело выполнится A × B раз. Если есть условие внутри — из этого числа надо вычесть/отобрать только подходящие пары. Перебор пар (i, j) удобно выписать списком — так нагляднее, чем держать два счётчика в голове.