Главная › ОГЭ по информатике › Задание 16
ОГЭ по информатике · задание №16

Задание 16 ОГЭ: программирование на Python

Читаем последовательности чисел, проверяем условия и собираем ответ. Восемь пошаговых разборов с рабочим кодом, пояснениями и практикой.

Вся тема в одном месте

Вся теория программирования и полный разбор задания 16

Полный разбор всей теории по программированию можно найти на сайте в учебнике. Там же — полный разбор задания 16 ОГЭ.

Ввод и вывод, переменные, условия, циклы и обработка последовательностей — изучай тему по порядку, от основ Python к самостоятельному решению.

Открыть учебник

В учебнике выбери ОГЭ и задание 16.

Основная идея

Как решать задание 16 ОГЭ по информатике

В этих задачах нужно написать программу обработки числовой последовательности: прочитать входные данные, проверить каждый элемент и вывести результат. Разберём восемь типов задач на Python: сумма, количество, минимум, среднее, максимум и свойства записи числа.

  1. Определи формат ввода. Сначала дано количество элементов или последовательность заканчивается нулём?
  2. Запиши условие отбора. Например, число кратно 3 и оканчивается на 8.
  3. Выбери переменные. Сумма, счётчик, минимум, максимум или флаг.
  4. Обработай каждый элемент один раз. Прочитай, проверь и обнови результат.
  5. После цикла выведи ответ в нужном порядке и проверь программу на примере.
Не нужно хранить весь списокДля разобранных задач достаточно текущего числа и нескольких переменных. Сначала разберись, что именно нужно получить, затем выбери шаблон.
Минимум Python для старта

Ввод, условия и переменные

ЗаписьЧто делает
number = int(input())Читает одну строку и превращает её в целое число.
= и ==Один знак присваивает значение; два знака сравнивают значения.
if условие:Выполняет строки с отступом, если условие истинно.
and / orand требует выполнения обоих условий; or — хотя бы одного.
suma += numberПрибавляет число к накопленной сумме.
count += 1Увеличивает количество найденных элементов на один.
print(answer)Печатает результат. Поясняющий текст в экзаменационный вывод добавлять не нужно.

После if, for, while и else ставим двоеточие. Строки внутри блока пишем с одинаковым отступом, обычно в четыре пробела. В наших примерах каждое число вводится с новой строки.

Если Python пока незнаком, начни с полной теории программирования в учебнике, затем вернись к этим примерам.

Два формата ввода

Когда нужен for, а когда while

Количество известно

Сначала вводится N, затем ровно N элементов. Первое число не является элементом.

n = int(input())
count = 0
for i in range(n):
    number = int(input())
    if number % 2 == 0:
        count += 1
print(count)

Ввод до нуля

Количество заранее неизвестно. Ноль завершает ввод и не обрабатывается.

number = int(input())
count = 0
while number != 0:
    if number % 2 == 0:
        count += 1
    number = int(input())
print(count)
Ноль не всегда означает конецСмотри условие, а не само число. В викторине из разбора 5 читаем заданное количество оценок, и оценка 0 является обычным элементом. В шаблоне while следующее число обязательно читается внутри цикла, иначе цикл может не завершиться.
Переводим условие в код

Остаток от деления и запись числа

УсловиеПроверка на Python
Кратно 3number % 3 == 0
Чётноеnumber % 2 == 0
Последняя десятичная цифра — 8number % 10 == 8
Последняя пятеричная цифраnumber % 5
Шестнадцатеричная запись без префиксаhex(number)[2:].upper()
Восьмеричная запись без префиксаoct(number)[2:]
Три цифры и последняя Blen(s) == 3 and s[-1] == 'B'

% возвращает остаток от деления. Для неотрицательного числа остаток по основанию b даёт последнюю цифру в этой системе. Например, 12 = 2 × 5 + 2, поэтому последняя пятеричная цифра числа 12 равна 2. Для отрицательных чисел проверка десятичной последней цифры требует отдельного учёта знака, например через abs(number) % 10; в задачах на цифры ниже числа натуральные.

В строке s функция len(s) считает символы, а s[-1] берёт последний. Префиксы 0x и 0o не относятся к цифрам записи, поэтому удаляем первые два символа срезом [2:].

Какие переменные нужны для ответа

Что ищемНачалоЧто меняем
Суммуsuma = 0suma += number для подходящего числа
Количествоcount = 0count += 1 для подходящего числа
Минимумmn = NoneЗапоминаем первое подходящее число, затем меньшее
Максимум неотрицательных оценокmx = 0mx = number, если число больше текущего максимума
Среднееsuma = 0 и count = 0Суммируем и считаем только подходящие; делим после цикла
Есть ли подходящееfound = Falsefound = True, если нашли хотя бы одно

Начальные значения минимума и максимума выбирай по ограничениям задачи. Для последовательности произвольных целых чисел максимум можно начать с первого элемента либо использовать подход с None, как для минимума в разборе 3.

Разбор 1 из 8 · цикл for

Сумма чисел, кратных 3 и оканчивающихся на 8

Сначала дано число a, затем ровно a натуральных чисел. Сложи только те из них, которые кратны 3 И оканчиваются десятичной цифрой 8.

Что означает ноль: 0 не является признаком конца: читаем ровно a чисел.

Ввод

3
18
25
48

Вывод

66

Проходим пример по шагам

ЧислоКратно 3?Заканчивается на 8?Сумма
18дада18
25нетнет18
48дада66

Код на Python

a = int(input())
suma = 0
for i in range(a):
    number = int(input())
    if number % 3 == 0 and number % 10 == 8:
        suma += number
print(suma)

Почему работает

Строка или проверкаСмысл
a = int(input())первое число сообщает, сколько элементов поступит
suma = 0до чтения элементов сумма нулевая
for i in range(a)выполняем ровно a повторов
if ... and ...обе проверки должны быть истинными
suma += numberприбавляем подходящее число к сумме
print(suma)выводим итог после цикла
На что обратить вниманиеПервое число 3 задаёт количество элементов: его не прибавляем к сумме. Нужны оба свойства, поэтому используем and. В ответ идёт сумма самих чисел 18 + 48, а не число подходящих элементов.
Разбор 2 из 8 · цикл while

Количество чётных чисел, кратных 7

Количество элементов неизвестно. Ноль завершает ввод и в подсчёт не входит. Посчитай элементы, которые одновременно чётны и кратны 7.

Что означает ноль: 0 — стоп-сигнал, он не проверяется на чётность и кратность.

Ввод

-32
14
17
0

Вывод

1

Проходим пример по шагам

ЧислоЧётное?Кратно 7?count
-32данет0
14дада1
17нетнет1
0стопне проверяем1

Код на Python

number = int(input())
count = 0
while number != 0:
    if number % 2 == 0 and number % 7 == 0:
        count += 1
    number = int(input())
print(count)

Почему работает

Строка или проверкаСмысл
number = int(input())считываем первое значение для проверки на ноль
count = 0пока подходящих чисел нет
while number != 0повторяем, пока не увидели стоп-сигнал
if ... and ...нужны сразу чётность и кратность семи
count += 1учитываем одно подошедшее число
number = int(input())обязательно читаем следующее число внутри цикла
На что обратить вниманиеОтрицательное число тоже может быть чётным и кратным 7: например, −14 подходит. Ноль в этой задаче — признак конца. Хотя математически он кратен 2 и 7, цикл до его проверки не доходит.
Разбор 3 из 8 · цикл while

Наименьшее число, кратное 3

Читаем числа до нуля. По условию хотя бы одно число кратно 3. Выведи самое маленькое из подходящих чисел.

Что означает ноль: 0 завершает ввод, минимум из него не выбираем.

Ввод

45
10
9
0

Вывод

9

Проходим пример по шагам

ЧислоКратно 3?Сравнение с минимумомmn после шага
45даmn ещё не задан — берём 4545
10нетне сравниваем45
9да9 < 459
0стопне сравниваем9

Код на Python

number = int(input())
mn = None
while number != 0:
    if number % 3 == 0 and (mn is None or number < mn):
        mn = number
    number = int(input())
print(mn)

Почему работает

Строка или проверкаСмысл
mn = Noneподходящего числа пока нет; None обозначает отсутствие значения
number % 3 == 0сначала отбираем числа, кратные трём
mn is None or number < mnберём первое подходящее число либо улучшаем найденный минимум
mn = numberзапоминаем само число, а не количество найденных чисел
number = int(input())в конце каждого прохода читаем следующий элемент
print(mn)по условию подходящее число обязательно есть, поэтому печатаем найденный минимум
На что обратить вниманиеНачальный минимум нельзя без проверки заменять на 0 или произвольное «очень большое» число. Здесь используем None: первое подходящее число становится минимумом независимо от его величины. Оператор or не вычисляет number < mn, когда mn is None уже истинно. Если по условию подходящих чисел может не быть, нужен отдельный вывод для этого случая.
Разбор 4 из 8 · цикл while

Среднее чисел, оканчивающихся на 1

Натуральные числа вводятся до нуля. Для чисел с последней десятичной цифрой 1 вычисляем среднее. Если таких чисел нет, выводим NO.

Что означает ноль: 0 завершает ввод, в сумму и количество не входит.

Ввод

21
30
11
0

Вывод

16.0

Проходим пример по шагам

ЧислоПоследняя цифра 1?sumacount
21да211
30нет211
11да322
0стоп322

Код на Python

number = int(input())
suma = 0
count = 0
while number != 0:
    if number % 10 == 1:
        suma += number
        count += 1
    number = int(input())
if count >= 1:
    print(suma / count)
else:
    print('NO')

Почему работает

Строка или проверкаСмысл
suma = 0; count = 0готовим сумму и число подходящих элементов
number % 10 == 1проверяем последнюю десятичную цифру
suma += number; count += 1одновременно обновляем сумму и количество
if count >= 1не допускаем деления на ноль
print(suma / count)сумму делим на количество; Python выдаёт 16.0
print('NO')сообщаем, что подходящих чисел не нашлось
На что обратить вниманиеСумму делим на количество только подходящих чисел. В примере это (21 + 11) / 2, а не деление на все введённые значения. Проверка count >= 1 защищает от деления на ноль. Формат 16.0 получается из обычного деления / в Python.

Если подходящих чисел нет

Ввод

16
5
0

Вывод

NO
Разбор 5 из 8 · цикл for

Викторина: максимум и наличие нулевого результата

Первое число — количество участников a. Далее a результатов от 0 до 20. Напечатай максимум на первой строке и YES или NO на второй в зависимости от того, встретился ли результат 0.

Что означает ноль: 0 — обычный результат участника, поскольку число результатов a известно заранее.

Ввод

4
15
12
0
17

Вывод

17
YES

Проходим пример по шагам

УчастникРезультатМаксимум mxНулевой count
115150
212150
30151
417171

Код на Python

a = int(input())
mx = 0
count = 0
for i in range(a):
    number = int(input())
    if number > mx:
        mx = number
    if number == 0:
        count += 1
print(mx)
if count >= 1:
    print('YES')
else:
    print('NO')

Почему работает

Строка или проверкаСмысл
a = int(input())узнаём количество результатов
mx = 0стартовый максимум для оценок от 0 до 20
if number > mxобновляем лучший результат
if number == 0учитываем участника с нулём
print(mx)первая строка ответа — лучший результат
print('YES') / print('NO')вторая строка сообщает, был ли ноль
На что обратить вниманиеЗдесь ноль — результат участника, а не конец ввода: после него всё равно читаем оставшиеся оценки. Начальное mx = 0 допустимо благодаря диапазону 0…20 и наличию участников. Для последовательности из отрицательных чисел такой старт максимума не подходит.
Разбор 6 из 8 · цикл while

Чётная последняя цифра в пятеричной записи

Натуральные числа вводятся до нуля. Сложи те из них, у которых последняя цифра в системе счисления с основанием 5 чётная. Если таких нет, напечатай NO.

Что означает ноль: 0 завершает ввод; хотя цифра 0 чётная, стоп-сигнал в сумму не входит.

Ввод

12
15
10
71
50
11
0

Вывод

87

Проходим пример по шагам

ЧислоОстаток % 5Запись в base 5Сумма
122 — чётный2212
150 — чётный3027
100 — чётный2037
711 — нечётный24137
500 — чётный20087
111 — нечётный2187

Код на Python

number = int(input())
suma = 0
found = False
while number != 0:
    ost = number % 5
    if ost % 2 == 0:
        suma += number
        found = True
    number = int(input())
if found:
    print(suma)
else:
    print('NO')

Почему работает

Строка или проверкаСмысл
number % 5остаток — последняя пятеричная цифра: 0, 1, 2, 3 или 4
ost % 2 == 0проверка цифры 0, 2 или 4
suma += numberскладываем исходное десятичное число
found = Trueзапоминаем факт хотя бы одного подходящего
if foundразличаем число суммы и сообщение NO
На что обратить вниманиеПроверяем чётность последней пятеричной цифры, а не самого десятичного числа. Например, 15 нечётно в десятичной системе, но 15₁₀ = 30₅ и подходит. В сумму добавляем исходные значения: 12 + 15 + 10 + 50 = 87. Цифра 0 чётная; завершающий ввод ноль всё равно не обрабатываем.

Если подходящих чисел нет

Ввод

1
6
0

Вывод

NO
Разбор 7 из 8 · цикл while

Трёхзначная hex-запись с последней B

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

Что означает ноль: 0 завершает ввод, hex(0) не проверяем.

Ввод

171
283
891
955
4123
0

Вывод

3

Проходим пример по шагам

ЧислоHex без 0xДлинаcount
171AB20
28311B31
89137B32
9553BB33
4123101B43

Код на Python

number = int(input())
count = 0
while number != 0:
    s = hex(number)[2:].upper()
    if len(s) == 3 and s[-1] == 'B':
        count += 1
    number = int(input())
print(count)

Почему работает

Строка или проверкаСмысл
hex(number)получаем строку, например '0x11b'
[2:]убираем два первых символа '0x'
.upper()преобразуем маленькую b в большую B
len(s) == 3проверяем число цифр записи без префикса
s[-1] == 'B'проверяем последний символ строки
count += 1увеличиваем ответ при выполнении обоих условий
На что обратить вниманиеhex() возвращает строку с префиксом 0x и строчными буквами. Сначала удаляем префикс срезом [2:], затем переводим буквы в верхний регистр. Проверять длину исходной строки с 0x нельзя. Числа натуральные, поэтому запись после среза непустая и не содержит знака минус.
Разбор 8 из 8 · цикл for

Четырёхзначная oct-запись с последней 1

Первое число — количество элементов a. Считаем те из a натуральных чисел, восьмеричная запись которых имеет ровно 4 символа и оканчивается на 1.

Что означает ноль: Количество элементов задано первым числом; отдельного стоп-сигнала нет.

Ввод

5
481
553
889
3025
4121

Вывод

3

Проходим пример по шагам

ЧислоOct без 0oДлинаcount
48174130
553105141
889157142
3025572143
41211003153

Код на Python

a = int(input())
count = 0
for i in range(a):
    number = int(input())
    s = oct(number)[2:]
    if len(s) == 4 and s[-1] == '1':
        count += 1
print(count)

Почему работает

Строка или проверкаСмысл
a = int(input())считываем число элементов перед циклом
for i in range(a)ровно a раз читаем число и проверяем его
oct(number)[2:]получаем восьмеричные цифры без префикса '0o'
len(s) == 4нужны именно четыре цифры
s[-1] == '1'последняя цифра записи должна быть 1
print(count)выводим число подходящих элементов
На что обратить вниманиеПервое число 5 — количество элементов, а не элемент последовательности. Проверяем длину записи после удаления 0o. Например, 741₈ заканчивается на 1, но имеет только три цифры и не подходит.
Проверь понимание

Практика с проверкой ответа

В этих мини-задачах числа для краткости перечислены через запятую. В программах каждый элемент вводится с новой строки. После ошибки можно изменить ответ и попробовать снова.

Решено: 0 из 8

1. Сумма с двумя условиями

Сначала дано количество 4, затем числа 18, 28, 48, 7. Какую сумму получим для чисел, кратных 3 и оканчивающихся на 8?

2. Счётчик до нуля

Введены −14, 7, 28, 0. Ноль завершает ввод. Сколько чисел одновременно чётны и кратны 7?

3. Минимум среди подходящих

До нуля введены 30, 8, 12, 0. Какое минимальное число кратно 3?

4. Среднее без подходящих чисел

Натуральные числа вводятся до нуля: 16, 5, 0. Нужно среднее чисел с последней цифрой 1; если их нет — слово NO. Что напечатает программа?

5. Нулевой результат в викторине

Дано количество участников 3 и оценки 0, 12, 7. Программа печатает максимум, затем YES/NO о наличии нуля. Какое слово будет на второй строке?

6. Последняя цифра в базе 5

Натуральные числа вводятся до нуля: 12, 15, 11, 0. Найди сумму чисел с чётной последней пятеричной цифрой.

7. Три цифры и буква B

Проверяются натуральные числа 171, 283, 4123, затем стоп-сигнал 0. Их записи: AB, 11B, 101B. Сколько записей ровно трёхзначные и заканчиваются на B?

8. Четыре восьмеричные цифры

Первое число 3 задаёт количество элементов. Далее 481, 553, 889; их записи — 741, 1051, 1571. Сколько четырёхзначных записей оканчиваются на 1?

Видеоразбор

Видео по заданию №16

Видео скоро выйдет.

Скачать примеры программ на Python

Восемь отдельных файлов .py, входные данные и ожидаемые ответы для каждого примера. Запускай один файл и вводи числа по одному на строке.

Скачать 8 примеров PythonВ архиве также есть инструкция для запуска и проверки в Python 3.
Перед проверкой

Частые ошибки в задании 16

  • Обработать количество N как первое число последовательности.
  • Принять нулевую оценку за конец ввода, хотя число результатов известно.
  • Забыть прочитать следующее число внутри while.
  • Использовать or вместо and, когда нужны оба свойства.
  • Вместо суммы чисел посчитать их количество или наоборот.
  • Разделить сумму на число всех элементов, хотя нужно среднее только подходящих.
  • Делить на ноль, если подходящих элементов нет.
  • Посчитать длину hex/oct вместе с префиксом.
  • Начать минимум с нуля для положительных чисел или максимум с нуля для отрицательных.
  • Вывести промежуточный результат внутри цикла вместо одного итогового ответа.

Вопросы о задании 16 ОГЭ

Нужно ли переводить число в пятеричную систему целиком?

Если проверяется только последняя цифра натурального числа, достаточно остатка number % 5. Полная запись не нужна.

Почему завершающий ноль не считаем?

В задачах «до нуля» он обозначает конец ввода. Условие while number != 0 останавливает цикл до обработки нуля. В задачах с заданным количеством элементов смысл нуля может быть другим.

Как проверить программу?

Сначала введи пример из условия, затем проверь отдельные случаи: подходит только одно число, подходит несколько, не подходит ни одного — если это допускается условием. Проверь обе части составного условия и точный формат вывода. Для минимума учитывай гарантию наличия подходящего числа.

Где изучить всю теорию программирования и полный разбор 16 задания?

На сайте в учебнике. Выбери ОГЭ и задание 16: там можно пройти теорию программирования по порядку и изучить полный разбор задания.

Продолжить подготовку

Полная теория и разбор задания 16 — в учебнике

Полный разбор всей теории по программированию можно найти на сайте в учебнике. Там же находится полный разбор задания 16 ОГЭ: от первых команд Python до обработки последовательностей.

Открой учебник, выбери ОГЭ и задание 16, чтобы пройти тему последовательно.

Перейти в учебник