Статья Автор: Деникина Н.В., Деникин А.В.

Обработка последовательности целых чисел - 1

Задание 16 ОГЭ

Базовый паттерн: фильтр + счётчик

Кратность, последняя цифра, чётность → количество и сумма. Циклы for и while.

 

План написания программы

Прежде чем писать код, пройди по этому плану. Он работает для любой задачи 16 ОГЭ.

5 шагов к решению
1
Определи тип цикла. Прочитай условие: если дано количество N — используй for. Если написано «последовательность заканчивается числом 0» — используй while. Если дано одно число — цикла по вводу нет.
2
Определи фильтр. Какие числа нужно отобрать? Кратные, чётные, двузначные, оканчивающиеся на цифру в другой СС…
3
Определи операцию. Что делать с отобранными числами? Количество, сумма, максимум, минимум, среднее?
4
Заведи переменные-аккумуляторы и задай им начальные значения (0 для суммы/счётчика, -1 для максимума, 999999 для минимума, False для флага).
5
Напиши вывод. Что печатать? Одно число? Два? Нужен ли вывод «NO», если ничего не нашлось?

Шаг 1 подробно: for или while?

В задании 16 ОГЭ встречаются три формата ввода. Тип цикла определяется тем, как задана последовательность:

📋 Формат 1: дано N

«Сначала подаётся количество элементов N, затем сами числа.»

→ Цикл for

n = int(input())
for i in range(n):
    a = int(input())
    ...

🔄 Формат 2а: до нуля

«Последовательность заканчивается числом 0.»

→ Цикл while a != 0

a = int(input())
while a != 0:
    ...
    a = int(input())

🔄 Формат 2б: до нуля

Тот же формат, но другой стиль записи.

→ Цикл while True

while True:
    a = int(input())
    if a == 0:
        break
    ...
Как отличить? Ищи в условии слова: «подаётся количество» → for. «Заканчивается числом 0» → while. Если на вход одно число — цикла ввода нет (но может быть цикл разбора на цифры).

Два стиля while: какой выбрать?

while a != 0

Классический стиль. Чтение в двух местах: до цикла и в конце тела. Легко забыть второй input().

a = int(input())    # ← 1-е чтение
while a != 0:
    if a % 3 == 0:
        cnt += 1
    a = int(input())  # ← 2-е чтение

while True + break

Современный стиль. Чтение только в одном месте. break выходит из цикла при встрече нуля.

while True:
    a = int(input())  # ← единств. чтение
    if a == 0:
        break
    if a % 3 == 0:
        cnt += 1
Оба варианта правильные и принимаются на ОГЭ. Вариант while True проще: одно чтение вместо двух — меньше шансов ошибиться. Выбирай тот, который тебе понятнее.
Ловушка while a != 0: если забыть a = int(input()) в конце тела — программа зациклится. В варианте while True такой ошибки не бывает.

Фильтры уровня 1

Кратность: a % k == 0 — число делится на k.

Последняя цифра: a % 10 == d — оканчивается на d.

Чётность: a % 2 == 0 (чётное), a % 2 != 0 (нечётное).

Пример 1: количество чётных

Условие

Напишите программу, которая в последовательности натуральных чисел определяет количество чётных чисел. Программа должна вывести одно число — количество чётных чисел.

Одна задача — три способа ввода. Формат указан в каждой вкладке:

Python · for
Python · while
Python · while True
C++ · for
C++ · while
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
n = int(input())
cnt = 0
for i in range(n):
    a = int(input())
    if a % 2 == 0:
        cnt += 1
print(cnt)
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
a = int(input())
cnt = 0
while a != 0:
    if a % 2 == 0:
        cnt += 1
    a = int(input())
print(cnt)
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
cnt = 0
while True:
    a = int(input())
    if a == 0:
        break
    if a % 2 == 0:
        cnt += 1
print(cnt)
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
#include <iostream>
using namespace std;
int main() {{
    int n, a, cnt = 0;
    cin >> n;
    for (int i = 0; i < n; i++) {{
        cin >> a;
        if (a % 2 == 0) cnt++;
    }}
    cout << cnt << endl;
}}
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
#include <iostream>
using namespace std;
int main() {{
    int a, cnt = 0;
    cin >> a;
    while (a != 0) {{
        if (a % 2 == 0) cnt++;
        cin >> a;
    }}
    cout << cnt << endl;
}}
В цикле while чтение числа стоит в двух местах: перед циклом (первое число) и в конце тела цикла (следующее). Это стандартный паттерн.

Пример 2: сумма кратных 5

Условие

Напишите программу, которая в последовательности натуральных чисел определяет сумму чисел, кратных 5. Программа должна вывести одно число — сумму чисел, кратных 5.

Единственное отличие от подсчёта: вместо cnt += 1 пишем s += a.

Python · for
Python · while
Python · while True
КуМир · for
КуМир · while
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
n = int(input())
s = 0
for i in range(n):
    a = int(input())
    if a % 5 == 0:
        s += a
print(s)
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
a = int(input())
s = 0
while a != 0:
    if a % 5 == 0:
        s += a
    a = int(input())
print(s)
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
s = 0
while True:
    a = int(input())
    if a == 0:
        break
    if a % 5 == 0:
        s += a
print(s)
Ввод: сначала подаётся количество чисел N, затем сами числа (по одному в строке). Числа не превышают 30 000.
алг
нач
  цел n, a, s, i
  ввод n
  s := 0
  нц для i от 1 до n
    ввод a
    если mod(a, 5) = 0 то
      s := s + a
    все
  кц
  вывод s
кон
Ввод: последовательность заканчивается числом 0 (0 не входит в последовательность). Числа не превышают 30 000.
алг
нач
  цел a, s
  ввод a
  s := 0
  нц пока a <> 0
    если mod(a, 5) = 0 то
      s := s + a
    все
    ввод a
  кц
  вывод s
кон

Проверь себя

Выбери правильный ответ. При ошибке покажем объяснение.

ОЧКИ: 0 / 0
 
 
 
 
 

Шпаргалка

Формат ввода Признак в условии Тип цикла
Дано N «подаётся количество элементов N» for i in range(n)
До нуля (классика) «заканчивается числом 0» while a != 0
До нуля (через break) «заканчивается числом 0» while True: ... break
Одно число «на вход подаётся натуральное число» нет цикла ввода
Фильтр Код
Кратно k a % k == 0
Оканчивается на d a % 10 == d
Чётное / нечётное a % 2 == 0 / a % 2 != 0
Печать