📚 Теория: Задание 16 ОГЭ — Программирование
💡 Что такое задание 16?
В задании 16 ОГЭ по информатике требуется написать программу на языке
программирования (обычно Python) для обработки последовательности
натуральных чисел. Задача проверяет умение:
- Работать с последовательностями чисел
- Применять алгоритмы перевода в системы счисления
- Анализировать цифры числа
- Подсчитывать сумму или количество по условию
Задача может быть одного из трёх типов, представленных ниже.
🐍 Основы Python
Для успешного выполнения задания 16 необходимо владеть основами языка
Python. Полный курс «Основы Python» (от истории
языка, типов данных, переменных, условий и циклов до множеств,
списков, словарей и списочных выражений) доступен на сайте
python.nayanovaacademy.ru.
🧮 Перевод в системы счисления
🔢 Как перевести число в p-ричную систему
Чтобы узнать, как выглядит число в системе счисления с основанием p,
нужно последовательно делить число на p и записывать остатки
справа налево (от последнего к первому).
✅ Практический способ проверки последней цифры
Чтобы проверить, оканчивается ли число N на цифру d в p-ричной
системе, достаточно найти остаток от деления N на p:
✅ Проверка последних двух цифр
Чтобы проверить, оканчивается ли число N на две цифры
ab в p-ричной системе, нужно найти
остаток от деления N на p²:
💡 Важно!
- Последняя цифра числа в p-ричной системе = N % p
- Последние две цифры числа в p-ричной системе = N % (p²)
- Предпоследняя цифра = (N // p) % p
📝 Пример
Число 31 в 5-ричной системе:
31 ÷ 5 = 6 (остаток 1) — последняя цифра 1
6 ÷ 5 = 1 (остаток 1)
1 ÷ 5 = 0 (остаток 1)
Результат: 31₁₀ = 111₅ (оканчивается на 1)
Проверка: 31 % 5 = 1 ✓
Предпоследняя цифра числа 112 в 8-ричной системе:
112₁₀ = 160₈
112 // 8 = 14, 14 % 8 = 6 → предпоследняя цифра 6
Проверка: (112 // 8) % 8 = 14 % 8 = 6 ✓
📝 Структура программы (с известным N)
Для задач с известным количеством элементов программа
обычно имеет следующую структуру:
n = int(input())
total_sum = 0
for i in
range(n):
x = int(input())
if
:
total_sum += x
print(total_sum)
🔁 Общий алгоритм:
- Считать N — количество элементов
- Инициализировать переменную для суммы (или количества)
- В цикле N раз считать очередное число
- Проверить условие отбора
-
Если условие выполняется — добавить число к сумме (или увеличить
счётчик)
- Вывести результат
📝 Структура программы (с сигнальным значением)
В некоторых вариантах задания количество чисел заранее
не известно. Признаком конца ввода является особое
сигнальное значение — обычно 0 (натуральные числа
всегда > 0, поэтому 0 не может быть элементом последовательности).
Программа читает числа в цикле while до тех пор, пока не
встретит 0.
total_sum = 0
x = int(input())
while x !=
0:
if
:
total_sum += x
x = int(input())
print(total_sum)
🔁 Общий алгоритм:
- Инициализировать переменную для суммы (или количества)
- Считать первое число
- Пока число не равно 0 (сигнальному значению):
-
3.1. Проверить условие отбора
3.2. Если условие выполняется — добавить к сумме
3.3. Считать следующее число
- Вывести результат
⚠️ Важно!
Сигнальное значение (0) не должно обрабатываться —
оно только указывает на конец ввода. Проверка условия и добавление к
сумме выполняются до чтения следующего числа.
⚙️ Типовые фрагменты кода
1️⃣ Последняя цифра числа в p-ричной системе равна d
if x % p == d:
total_sum += x
2️⃣ Окончание на две цифры ab в p-ричной системе
if x % (p * p) == a * p + b:
total_sum += x
3️⃣ Предпоследняя цифра числа в p-ричной системе равна d
if (x // p) % p == d:
total_sum += x
4️⃣ Подсчёт цифр числа, кратных k
count = 0
temp = x
while temp >
0:
digit = temp % 10
if digit % k ==
0:
count +=
1
temp //= 10
print(count)
5️⃣ Сумма цифр числа, удовлетворяющих условию
total = 0
temp = x
while temp >
0:
digit = temp % 10
if digit >
7:
total += digit
temp //= 10
print(total)
6️⃣ Поиск минимальной/максимальной цифры
min_digit = 9
temp = x
while temp >
0:
digit = temp % 10
if digit <
min_digit:
min_digit = digit
temp //= 10
print(min_digit)
✏️ Примеры решения задач
Пример 1: Окончание в 5-ричной системе на цифру 3
Условие: Напишите программу подсчёта суммы
элементов последовательности натуральных чисел, запись которых в
5-ричной системе счисления оканчивается на цифру 3. В ответе
запишите только сумму.
Входные данные: 5, 15, 13, 18, 17, 19
Решение:
# Программа:
n = int(input())
total = 0
for i in range(n):
x = int(input())
if x % 5 == 3:
total += x
print(total)
Проверка: 15%5=0, 13%5=3 ✓, 18%5=3 ✓, 17%5=2,
19%5=4
Ответ: 13 + 18 = 31
Пример 2: Окончание на 32 в 8-ричной системе
Условие: Напишите программу подсчёта суммы
элементов последовательности натуральных чисел, запись которых в
8-ричной системе счисления оканчивается на 32. В ответе запишите
только сумму.
Входные данные: 4, 90, 116, 26, 32
Решение:
n = int(input())
total = 0
for i in range(n):
x = int(input())
if x % (8*8) == 3*8 + 2:
total += x
print(total)
3*8 + 2 = 26, поэтому условие: x % 64 == 26
Проверка: 90%64=26 ✓, 116%64=52, 26%64=26 ✓,
32%64=32
Ответ: 90 + 26 = 116
Пример 3: Предпоследняя цифра в 8-ричной системе равна 3
Условие: Напишите программу подсчёта суммы
элементов последовательности натуральных чисел, предпоследняя цифра
в записи которых в системе счисления с основанием 8 равна 3.
Входные данные: 4, 24, 32, 88, 112
Решение:
n = int(input())
total = 0
for i in range(n):
x = int(input())
if (x // 8) % 8 == 3:
total += x
print(total)
Проверка: 24→24//8=3→3%8=3 ✓, 32→32//8=4→4%8=4,
88→88//8=11→11%8=3 ✓, 112→112//8=14→14%8=6
Ответ: 24 + 88 = 112
Пример 4: Ввод до сигнального 0 (окончание на 3 в 5-ричной)
Условие: Напишите программу подсчёта суммы
элементов последовательности натуральных чисел, запись которых в
5-ричной системе счисления оканчивается на цифру 3. Количество чисел
заранее не известно. Признак конца ввода — число 0.
Входные данные: 13, 18, 17, 15, 0
Решение:
total = 0
x = int(input())
while x != 0:
if x % 5 == 3:
total += x
x = int(input())
print(total)
Проверка: 13%5=3 ✓, 18%5=3 ✓, 17%5=2, 15%5=0
0 — сигнал конца, не обрабатываем
Ответ: 13 + 18 = 31
📊 Вариант: найти среднее арифметическое
Помимо подсчёта суммы отобранных чисел или их
количества, в задании 16 может потребоваться найти
среднее арифметическое тех элементов
последовательности, которые удовлетворяют заданному условию.
Для этого нужно накапливать одновременно две переменные:
total_sum = 0
count = 0
for i in
range(n):
x = int(input())
if
:
total_sum += x
count +=
1
if count >
0:
print(total_sum /
count)
else:
print(0)
Важно помнить, что если ни одно число не подошло под условие, то
count == 0. Делить на ноль нельзя, поэтому сначала
проверяем count > 0. В ответ при таком случае, вероятнее
всего, нужно вывести 0.
💡 Связь со стандартными формулами
Среднее арифметическое отобранных чисел считается так же, как и
всегда: сумма ÷ количество. Поэтому в коде
достаточно завести две переменные-счётчика: одна для суммы, другая
для количества подходящих чисел.
⚠️ Частые ошибки
-
Перепутать основание системы счисления —
внимательно проверяйте, какое основание указано в условии
-
Неправильное условие для последних двух цифр — для
окончания на
ab в p-ричной системе используйте
x % (p*p) == a*p + b
-
Предпоследняя цифра — это не то же самое, что последняя
— используйте формулу
(x // p) % p
-
Забыть инициализировать счётчик/сумму — всегда
устанавливайте начальное значение (0 для суммы/количества)
-
Использовать x вместо temp при анализе цифр —
копируйте число во временную переменную, иначе потеряете исходное
значение
-
Неправильный ввод/вывод — на вход сначала N, затем
элементы. На выходе только число (без пояснений)
🎯 Алгоритм решения
- 📝 Внимательно прочитайте условие: какой тип задачи?
-
🔢 Определите, какое условие проверять (окончание, цифра и т.д.)
- 💻 Напишите программу по шаблону с правильным условием
- 🧪 Проверьте программу на тестовых данных
- ✅ Запишите полученный ответ