📚 Теория: Задание 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²)
- Последние k цифр числа в p-ричной системе = N % pk
- Предпоследняя цифра = (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
# ИЛИ count = 0
# Цикл по всем элементам последовательности
for i in range(n):
x = int(input())
if x % p == d: # условие отбора
total_sum += x
# Вывод результата
print(total_sum)
🔁 Общий алгоритм:
- Считать N — количество элементов
- Инициализировать переменную для суммы (или количества)
- В цикле N раз считать очередное число
- Проверить условие отбора
- Если условие выполняется — добавить число к сумме (или увеличить счётчик)
- Вывести результат
📝 Структура программы (с сигнальным значением)
В некоторых вариантах задания количество чисел заранее
не известно. Признаком конца ввода является особое
сигнальное значение — обычно 0 (натуральные числа
всегда > 0, поэтому 0 не может быть элементом последовательности).
Программа читает числа в цикле while до тех пор, пока не
встретит 0.
total_sum = 0
# ИЛИ count = 0
# Чтение первого числа
x = int(input())
# Цикл пока не встретится сигнальное значение (0)
while x != 0:
if x % p == d: # условие отбора
total_sum += x
# Чтение следующего числа
x = int(input())
# Вывод результата
print(total_sum)
🔁 Общий алгоритм:
- Инициализировать переменную для суммы (или количества)
- Считать первое число
- Пока число не равно 0 (сигнальному значению):
-
3.1. Проверить условие отбора
3.2. Если условие выполняется — добавить к сумме
3.3. Считать следующее число - Вывести результат
⚠️ Важно!
Сигнальное значение (0) не должно обрабатываться — оно только указывает на конец ввода. Проверка условия и добавление к сумме выполняются до чтения следующего числа.
⚙️ Типовые фрагменты кода
1️⃣ Последняя цифра числа в p-ричной системе равна d
total_sum += x
2️⃣ Окончание на две цифры ab в p-ричной системе
total_sum += x
3️⃣ Предпоследняя цифра числа в p-ричной системе равна d
total_sum += x
4️⃣ Подсчёт цифр числа, кратных k
temp = x
while temp > 0:
digit = temp % 10
if digit % k == 0:
count += 1
temp //= 10
print(count)
5️⃣ Сумма цифр числа, удовлетворяющих условию
temp = x
while temp > 0:
digit = temp % 10
if digit > 7: # или digit % 3 != 0, digit <= 6 и т.д.
total += digit
temp //= 10
print(total)
6️⃣ Поиск минимальной/максимальной цифры
# ИЛИ max_digit = 0
temp = x
while temp > 0:
digit = temp % 10
if digit < min_digit: # для максимума: if digit > max_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 может потребоваться найти среднее арифметическое тех элементов последовательности, которые удовлетворяют заданному условию.
Для этого нужно накапливать одновременно две переменные:
count = 0
for i in range(n):
x = int(input())
if x % p == d: # условие отбора
total_sum += x
count += 1
if count > 0:
print(round(total_sum / count, 2))
else:
print("Нет")
Важно помнить, что если ни одно число не подошло под условие, то
count == 0. Делить на ноль нельзя, поэтому сначала
проверяем count > 0. В таком случае принято выводить не
число, а слово «Нет» — так же поступают и в задачах на
минимальный/максимальный элемент, если подходящих чисел не нашлось.
Само среднее арифметическое выводится как результат деления,
округлённый до двух знаков после запятой:
round(total_sum / count, 2).
💡 Связь со стандартными формулами
Среднее арифметическое отобранных чисел считается так же, как и всегда: сумма ÷ количество. Поэтому в коде достаточно завести две переменные-счётчика: одна для суммы, другая для количества подходящих чисел.
⚠️ Частые ошибки
- Перепутать основание системы счисления — внимательно проверяйте, какое основание указано в условии
-
Неправильное условие для последних двух цифр — для
окончания на
abв p-ричной системе используйтеx % (p*p) == a*p + b -
Предпоследняя цифра — это не то же самое, что последняя
— используйте формулу
(x // p) % p - Забыть инициализировать счётчик/сумму — всегда устанавливайте начальное значение (0 для суммы/количества)
- Использовать x вместо temp при анализе цифр — копируйте число во временную переменную, иначе потеряете исходное значение
- Неправильный ввод/вывод — на вход сначала N, затем элементы. На выходе только число (без пояснений)
🎯 Алгоритм решения
- 📝 Внимательно прочитайте условие: какой тип задачи?
- 🔢 Определите, какое условие проверять (окончание, цифра и т.д.)
- 💻 Напишите программу по шаблону с правильным условием
- 🧪 Проверьте программу на тестовых данных
- ✅ Запишите полученный ответ