Задание 16 ОГЭ по информатике 2027: программа на Python
- Раздел
- Алгоритмы и программирование · часть 2
- Максимальный балл
- 2 балла
- Уровень
- высокий
- Что проверяет
- Создавать и выполнять программы на универсальном языке программирования
- Что нужно сделать
- Написать программу, которая читает последовательность чисел и печатает одно число: количество, сумму или максимум чисел с условием.
- Как записать ответ
- программа на любом языке программирования — файлом исходного текста
- Время
- Около 25 минут по обобщённому плану ФИПИ
- Элемент кодификатора
- 3.2
- Где решается
- За компьютером; ответ — отдельный файл, его проверяют эксперты по критериям
- Программа
- Система программирования
- Файл ответа
- Исходный текст программы на любом языке; у нас проверяем Python и Кумир на тестах, остальные языки — ориентировочно
- Справляются
- 5,9 % участников по отчётам Кировской и Иркутской областей и Татарстана за 2025 год
Шестнадцатое задание ОГЭ по информатике 2027 года — единственное, где программу пишут самому. На вход приходит последовательность натуральных чисел: либо до нуля, либо сначала их количество N. Программа выбирает числа с условием — кратность, последняя цифра, запись в другой системе счисления — и печатает одно число: сколько их, их сумму, наибольшее или наименьшее. Язык любой: Python, Паскаль, C++, школьный алгоритмический язык.
Это задание высокого уровня, последнее в работе: по плану ФИПИ на него около 25 минут, максимум — 2 балла. До него многие просто не доходят: по отчёту Иркутской области за 2025 год к заданию 16 не приступили 94,5 % участников. При этом сама программа короткая — 7–10 строк, и почти все варианты собираются из одного каркаса: цикл ввода, проверка условия, счётчик.
Что нужно сдать
- Сдают один файл с исходным текстом программы. Имя файла и каталог называют организаторы; расширение — обычное для вашего языка (.py для Python, .kum для Кумира).
- Программа обязана сама читать данные. Если числа примера вписаны прямо в код, программа на других тестах не работает, и за задание ставят 0 баллов.
- Вывод — только одно число. Ни подсказок для ввода, ни слов вокруг ответа: проверяют, что программа напечатала именно искомое число.
- Эксперт запускает программу на трёх тестах из критериев; примера из условия среди них нет. Поэтому совпадение с примером — ещё не гарантия.
- Не оценивают язык, стиль, имена переменных, комментарии и скорость — только ответы на тестах. Ввод из файла вместо клавиатуры методические рекомендации ФИПИ тоже допускают.
Как выполнять: по шагам
Каркас: числа до нуля
Так устроено задание в демоверсии 2027 года: количество чисел неизвестно, ввод кончается нулём, а сам 0 в последовательность не входит.
c = 0
x = int(input())
while x != 0:
if условие:
c += 1
x = int(input())
print(c)Первое число читают до цикла, следующее — последней строкой тела цикла. Тогда ноль не попадёт в проверку.
Каркас: сначала количество N
Если в условии сказано «сначала вводится количество чисел», цикл — for:
n = int(input())
s = 0
for i in range(n):
x = int(input())
if условие:
s += x
print(s)Не путайте два формата: программа «до нуля» на входе с N зависнет или упадёт, а программа с N на входе «до нуля» прочитает первое число как количество.
Python в IDLE
1. File → New File — откроется окно для текста программы. 2. Наберите программу и сохраните её: File → Save, имя и папка — те, что назвали организаторы, расширение .py. 3. Запустите: Run → Run Module (клавиша F5). Ввод и вывод появятся в окне оболочки. 4. Введите числа примера по одному, после каждого — Enter. Сравните ответ с примером. 5. Запустите ещё два-три раза на своих тестах (ниже) и только потом сдавайте файл.
Школьный алгоритмический язык в Кумире
Та же программа демоверсии 2027 года на алгоритмическом языке:
алг
нач
цел x, c
c := 0
ввод x
нц пока x <> 0
если mod(x, 8) = 5 и x >= 512 и x <= 4095 то
c := c + 1
все
ввод x
кц
вывод c
конНаберите её в новом файле Кумира, запустите выполнение и вводите числа в области ввода-вывода по одному. Файл сохраните с расширением .kum.
Свои тесты перед сдачей
1. Пример из условия — ответ должен совпасть. 2. Тест, где ни одно число не подходит: ответ 0 (у суммы — 0, у максимума смотрите, что гарантирует условие). 3. Граничные числа: если условие «четырёхзначна в восьмеричной», проверьте 512 и 4095 — они подходят, а 511 и 4096 нет. 4. Число, которое проходит одно условие, но не другое: так ловится «или» вместо «и».
Критерии оценивания
Программа на языке программирования
до 2 балловНаписать программу обработки последовательности чисел (в демоверсии — подсчёт чисел с заданной записью в восьмеричной системе). «Решением является программа, записанная на любом языке программирования».
Программа и тесты
макс. 2 балла- «Предложено верное решение. Программа правильно работает на всех приведённых выше тестах».
- «Программа выдаёт неверный ответ только на одном из тестов, приведённых выше».
- «Программа выдаёт на тестах неверные ответы, количество которых отличается от указанного в критерии на 1 балл».
- Эксперты проверяют программу на тестах из критериев: в демоверсии их три. Тест не засчитан при неверном ответе, зацикливании или аварийном завершении.
- Программа должна читать входные данные: решение с числами, записанными прямо в коде, оценивается в 0 баллов. Если из-за синтаксических ошибок программу нельзя запустить — тоже 0.
- «Программа должна напечатать только одно число – количество искомых элементов последовательности».
- Python и школьный алгоритмический язык (Кумир) запускаем на тестах: входные данные уходят в браузер, ответы сверяет сервер.
- Программы на C++, Pascal, Java и C# оценивает ИИ по тем же тестам — такая оценка помечена как ориентировочная.
Критерии всех заданий экзамена — на странице критериев ОГЭ.
За что снимают баллы
| Ошибка | Сколько снимут |
|---|---|
| Неверный ответ ровно на одном из трёх тестов критериев | −1 балл |
| Неверный ответ на двух или трёх тестах — например, условия соединены «или» вместо «и» | 0 баллов за задание |
| Программа зависла или завершилась с ошибкой на тесте | тест не засчитан, как неверный ответ |
| Синтаксическая ошибка: программу нельзя запустить | 0 баллов за задание |
| Нет ввода — числа вписаны в программу — или нет вывода | 0 баллов за задание |
| Решение на Паскале, C++ или алгоритмическом языке вместо Python | не снимают: язык любой |
| Ввод из файла вместо клавиатуры, лишние переменные, нет комментариев | не снимают |
Проверить свой файл
Задания номера 16 из банка тренажёра — с файлами, как на экзамене. Скачайте материалы, выполните задание в LibreOffice, МойОфис или своей среде и загрузите файл ответа: проверка по критериям ФИПИ покажет балл и протокол — что засчитано, а что нет. Кнопка «Ещё 5 таких» у типа задания ниже даёт задания одного типа.
Задание 16 вместе с остальными — в вариантах целиком.
Шаблоны кода на Python
Ввод до 0 и подсчёт чисел с условием
Последовательность заканчивается числом 0: читаем в цикле, пока не придёт 0, сам 0 не обрабатываем. Меняете только условие в if — кратность (x % 3 == 0) или последнюю цифру (x % 10 == 4).
count = 0
while True:
x = int(input())
if x == 0: # 0 — конец последовательности, его не считаем
break
if x % 3 == 0 and x % 10 == 4: # условие из задачи
count += 1
print(count)14 24 34 54 0
2
Сначала количество чисел: сумма с условием
Если первым вводят, сколько будет чисел, нужен цикл for на n шагов, а не до 0. Сумму копим в переменной, начальное значение — 0.
n = int(input()) # сначала — сколько будет чисел
total = 0
for _ in range(n):
x = int(input())
if x % 6 == 0: # условие из задачи
total += x
print(total)5 12 7 18 30 9
60
Максимум среди чисел с условием
Начальное значение — 0: числа натуральные, любое подходящее его заменит. Для минимума начните с числа больше любого допустимого (по условию, например 30 001) и замените знак сравнения.
best = 0 # числа натуральные: 0 меньше любого из них
while True:
x = int(input())
if x == 0:
break
if x % 5 == 0 and x > best: # условие из задачи и «больше лучшего»
best = x
print(best)35 12 80 45 7 0
80
Цифры числа в десятичной, двоичной или восьмеричной записи
Цифры отщепляем с конца: y % base — последняя цифра записи, y //= base — отбросить её. Тот же цикл даёт сумму цифр, их количество и запись в системе с основанием base.
base = 10 # 8 — восьмеричная запись, 2 — двоичная
count = 0
while True:
x = int(input())
if x == 0:
break
y, digits, s = x, 0, 0
while y > 0:
d = y % base # последняя цифра записи
s += d
digits += 1
y //= base
if s > 10: # условие на цифры: сумма s, количество digits, последняя x % base
count += 1
print(count)19 46 59 100 389 0
2
Среднее арифметическое чисел с условием
Копим сумму и количество подходящих чисел, делим в конце. Если подходящих нет, деление на 0 уронит программу — проверьте count и выведите то, что требует условие.
count = 0
total = 0
while True:
x = int(input())
if x == 0:
break
if x % 8 == 0: # условие из задачи
count += 1
total += x
if count > 0:
print(round(total / count, 1)) # «с точностью до десятых»
else:
print('NO')16 10 24 31 0
20.0
Типы задания 16 с решением
Количество чисел с условием на запись в другой системе
На вход подаются натуральные числа, ввод заканчивается нулём. Посчитайте числа, запись которых в пятеричной системе трёхзначна и оканчивается на 2.
27 130 57 12 122 0
Для этого примера ответ — 3.
1. Трёхзначные пятеричные числа — от 1005 = 25 до 4445 = 124. 2. Последняя пятеричная цифра — x % 5. 3. Каркас «до нуля»: счётчик c увеличиваем, если 25 <= x <= 124 и x % 5 == 2.
На примере: 27 = 1025, 57 = 2125 и 122 = 4425 подходят; 130 = 10105 — четыре цифры, 12 = 225 — две. Это тип задания из демоверсии 2027 года.
c = 0
x = int(input())
while x != 0:
# три цифры в пятеричной записи и последняя цифра 2
if 25 <= x <= 124 and x % 5 == 2:
c += 1
x = int(input())
print(c)
27 130 57 12 122 0
Ответ: 3
Сумма чисел с двумя условиями
Сначала вводится количество чисел N, затем N натуральных чисел. Найдите сумму чисел, которые кратны 6, но не кратны 4.
6 18 24 30 7 42 36
Для этого примера ответ — 90.
1. Первое число — количество, его не складывают: цикл for на N повторений. 2. «Кратно 6, но не кратно 4» — x % 6 == 0 and x % 4 != 0. 3. Подходящие числа прибавляем к сумме s.
На примере: 24 и 36 кратны 6, но делятся и на 4; 7 не кратно 6. Остаются 18 + 30 + 42 = 90.
n = int(input())
s = 0
for i in range(n):
x = int(input())
if x % 6 == 0 and x % 4 != 0:
s += x
print(s)
6 18 24 30 7 42 36
Ответ: 90
Наименьшее число с условием
На вход подаются натуральные числа, не больше 30 000; ввод заканчивается нулём. Найдите наименьшее число, оканчивающееся на 7. Гарантируется, что такое число есть.
1457 307 98 4407 2017 0
Для этого примера ответ — 307.
1. Начальный минимум — число больше любого возможного: 30001. С нулём минимум никогда бы не изменился. 2. Если x % 10 == 7 и x меньше текущего минимума — запоминаем x. 3. Ноль-признак конца в сравнение не попадает: проверка стоит внутри цикла while x != 0.
На примере: на 7 оканчиваются 1457, 307, 4407 и 2017; наименьшее — 307.
m = 30001 # больше любого числа из условия
x = int(input())
while x != 0:
if x % 10 == 7 and x < m:
m = x
x = int(input())
print(m)
1457 307 98 4407 2017 0
Ответ: 307
Условие на цифры числа
На вход подаются натуральные числа, ввод заканчивается нулём. Посчитайте числа, у которых цифра десятков больше цифры единиц.
351 1249 96 7 4482 36 0
Для этого примера ответ — 3.
1. Цифра единиц — x % 10, цифра десятков — (x // 10) % 10. 2. У однозначного числа цифра десятков равна 0 — условие для него ложно, отдельный случай не нужен. 3. Считаем числа, где десятки больше единиц.
На примере: 351 (5 > 1), 96 (9 > 6), 4482 (8 > 2) подходят; 1249 (4 < 9), 7 (0 < 7), 36 (3 < 6) — нет.
c = 0
x = int(input())
while x != 0:
tens = (x // 10) % 10 # цифра десятков
units = x % 10 # цифра единиц
if tens > units:
c += 1
x = int(input())
print(c)
351 1249 96 7 4482 36 0
Ответ: 3
Что нужно знать
- x % k — остаток от деления: последняя цифра числа в системе с основанием k. x % 10 — последняя десятичная цифра, x % 8 — последняя восьмеричная. Переводить число целиком не нужно.
- x // k — деление нацело: отбрасывает последнюю цифру. Цифра десятков — (x // 10) % 10.
- Сколько цифр в k-ичной записи — это диапазон: четырёхзначные восьмеричные числа идут от 10008 = 512 до 77778 = 4095, трёхзначные пятеричные — от 1005 = 25 до 4445 = 124.
- Кратно и не кратно: x % 3 == 0 и x % 3 != 0. Условия соединяют словом and, если нужны оба сразу.
- Начальные значения: счётчик и сумма — 0; максимум натуральных чисел — 0; минимум — число больше любого возможного, например 30001, если в условии числа не больше 30 000.
Разбор задания демоверсии 2027
В демоверсии 2027 года нужно посчитать числа, запись которых в восьмеричной системе четырёхзначна и оканчивается на 5. Ввод — до нуля, в примере 485, 557, 893, 3029, 4125 и ответ 3.
Условие разбивается на два. «Четырёхзначна» — число от 512 до 4095 включительно. «Оканчивается на 5» — x % 8 == 5. Проверим пример: 485 = 7458 — три цифры; 557 = 10558, 893 = 15758, 3029 = 57258 — подходят; 4125 = 100358 — пять цифр. Итого 3.
Программа — каркас «до нуля» с условием 512 <= x <= 4095 and x % 8 == 5. В решении ФИПИ то же условие записано как 511 < x < 4096, а цикл идёт, пока x больше нуля. Мы прогнали программу на трёх тестах критериев: ответы 1, 3 и 0 совпали с эталоном. Во втором тесте подходят 565 = 10658, 853 = 15258 и 1141 = 21658, а 377 и 4309 выпадают по длине записи. В третьем тесте ловушка: у 535 = 10278, 1555 = 30238 и 2775 = 53278 десятичная запись кончается на 5, а восьмеричная — нет.
Решите задание сами в демоверсии ОГЭ 2027 по информатике: программу на Python проверка запустит на тестах, как эксперт.
Типичные ошибки
Проверили десятичную запись вместо нужной
В методических рекомендациях ФИПИ разобрана программа, где условие на делимость заменили проверкой последней цифры: она ошиблась на одном тесте и получила 1 балл. В демоверсии 2027 года та же ловушка с системой счисления: «оканчивается на 5 в восьмеричной» — это x % 8 == 5, а не x % 10 == 5.
«Или» вместо «и»
Если условия соединены через or, программа считает числа, подходящие хотя бы под одно условие. В разборе ФИПИ такая программа на всех трёх тестах выдала неверные ответы — 0 баллов. Читайте союзы условия: «кратно 3 и оканчивается на 4» — and.
Числа примера вписаны в программу
Программа, которая не читает ввод, а считает заранее записанные числа, на тестах эксперта даёт ответ примера. По методическим рекомендациям ФИПИ это 0 баллов, даже если ответ примера верный.
Ноль обработан как число
Если читать x в начале тела цикла и сразу проверять условие, ноль-признак конца тоже пройдёт проверку. Для счётчика это иногда незаметно, а минимум превратится в 0. Читайте следующее число последней строкой цикла.
Неверная граница диапазона
«Четырёхзначна в восьмеричной» — от 512 до 4095 включительно. Условие x > 512 теряет число 512, а x < 4096 и x <= 4095 равнозначны. Проверьте обе границы на своём тесте.
Программа с синтаксической ошибкой
Программу, которая не запускается, оценивают в 0 баллов — в отличие от задания 15, где синтаксис прощают. Перед сдачей запустите файл хотя бы на примере из условия.
Вопросы и ответы
На каком языке писать задание 16?
На любом, который вы знаете: критерии ФИПИ принимают программу на любом языке программирования. Перечень программ определяет регион: например, в Московской области в 2026 году на компьютерах стояли Python (IDLE), PascalABC.NET, CodeBlocks для C++ и Кумир.
Как проверить программу для задания 16 без эксперта?
Запустите её на примере из условия, затем на своих тестах: где ни одно число не подходит, где есть числа на границах условия и где число проходит только одно из двух условий. Если все ответы сходятся с подсчётом вручную, программа, скорее всего, верна.
Можно ли прочитать все числа одной строкой через split?
Нет, если числа вводятся по одному в строке, как в примере работы программы: input().split() прочитает только первое число. Читайте int(input()) в цикле — до нуля или N раз, как сказано в условии.
Сколько баллов можно получить, если программа ошибается на одном тесте?
1 балл из 2. Ошибка на двух тестах или больше, программа без ввода или не запускающаяся программа — 0 баллов.
Нужно ли переводить число в другую систему счисления?
Обычно нет. Последняя цифра в системе с основанием k — остаток x % k, а число цифр задаётся диапазоном: например, четырёхзначные восьмеричные числа — от 512 до 4095. Перевод строкой (oct, bin) тоже работает, но в нём легко забыть про префикс 0o или 0b.
Другие задания раздела «Алгоритмы и программирование»
- Задание 5исполнитель с командами · до 1 балла
- Задание 6исполнение программы · до 1 балла
- Задание 15алгоритм для Робота · до 2 баллов
По демоверсии, спецификации и кодификатору ФИПИ 2027
Обновлено: