Задание №5 ЕГЭ по информатике: разбор, шаблоны кода Python и анти-примеры | СмартКИМ
СмартКИМ УДОБНАЯ ПОДГОТОВКА К ЕГЭ И ОГЭ
Задачи №5 Решать в тренажере Войти в СмартКИМ
ЕГЭ (1–27) ОГЭ (1–15) Python: шпаргалка
Быстрый переход по номерам и темам
Базовый (1 балл) Время: 2-4 мин Python bin() int(s, 2) Строковые срезы Все задачи №{ topic_num } в каталоге

Задание №5. Анализ и построение алгоритмов для автоматов

Тема: Побитовые манипуляции, двоичная и n-ичная запись, остатки от деления и поиск N / R
Автомат преобразует натуральное число N в число R по заданному пошаговому алгоритму. На Python решается прямым перебором N в диапазоне от 1 до 1000 за 5 секунд.

1. Функции Python для Задания №5:

  • bin(n)[2:] — перевод числа $n$ в двоичную строку (срез [2:] отрезает служебный префикс '0b').
  • b.count('1') — количество единиц в двоичной записи (в точности равно сумме цифр двоичного числа!).
  • b.count('1') % 2 — бит четности суммы цифр.
  • int(b, 2) — перевод двоичной строки обратно в десятичное целое число $R$.
  • int(s, 3) — перевод троичной строки в десятичное число.

2. Пошаговый алгоритм решения:

  1. Запускаем цикл перебора for n in range(1, 1000):.
  2. Формируем двоичную (или троичную) запись числа $N$.
  3. В точности применяем шаги алгоритма автомата через конкатенацию строк (b = b + '01').
  4. Переводим полученную строку в десятичное число $R = \text{int}(b, 2)$.
  5. Проверяем условие задачи (например, $R > 123$) и сохраняем пару $(N, R)$ в список.
  6. Выводим минимальное или максимальное $N$ / $R$ по вопросу задачи.

Разновидности и прототипы задания на экзамене

Тип 1: Дописывание битов четности в двоичной записи
К двоичной записи N дописываются биты четности в конец (сумма цифр mod 2).
Тип 2: Позиционная обработка разрядов и срезы
Удаление первого/последнего символа двоичной строки с дописыванием остатков.
Тип 3: Алгоритмы в троичной и n-ичной системах счисления
Перевод N в 3-ичную СС делением с остатком и дописывание остатка от деления на 3.

Боевой шаблон решения на Python

Запустить код в онлайн-песочнице
# === Боевой шаблон Задания №5 ЕГЭ на Python ===

# 1. Классический автомат с битами четности:
results = []
for n in range(1, 1000):
    b = bin(n)[2:]
    
    # Шаг 1: дописываем остаток от деления суммы цифр на 2:
    b += str(b.count('1') % 2)
    # Шаг 2: повторяем операцию:
    b += str(b.count('1') % 2)
    
    r = int(b, 2)
    
    # Условие задачи (например, R > 97):
    if r > 97:
        results.append((n, r))

# Если просят минимальное R:
print("Минимальное R > 97:", min(r for n, r in results))
# Если просят минимальное N, для которого R > 97:
print("Минимальное N:", min(n for n, r in results))

# -------------------------------------------------------------
# 2. Автомат в троичной системе счисления:
def to_base3(n):
    if n == 0: return '0'
    res = ''
    while n > 0:
        res = str(n % 3) + res
        n //= 3
    return res

results3 = []
for n in range(1, 1000):
    s = to_base3(n)
    if n % 3 == 0:
        s += s[-2:]  # дописываем последние 2 цифры
    else:
        s += to_base3((n % 3) * 5)
    r = int(s, 3)
    if r > 133:
        results3.append((n, r))

if results3:
    print("Троичный автомат: мин. R:", min(r for n, r in results3))

Анти-примеры (Типичные ошибки vs Как делать правильно)

Как делать НЕ надо:
Ошибка: Забыть срез [2:] у bin(n)
Строка '0b101' вместо '101' исказит подсчет длины и конкатенацию битов!
Как делать ПРАВИЛЬНО:
Правильно: ВСЕГДА писать bin(n)[2:]
Как делать НЕ надо:
Ошибка: Использовать bin(int(b, 2) + 1) на строках
Переводить строку в число и обратно туда-сюда вместо простой склейки строк.
Как делать ПРАВИЛЬНО:
Правильно: Модифицировать двоичную запись напрямую как строку: b += '10'
ГРОБ

ГРОБ №5: Автомат в 3-ичной или 5-ичной системе счисления

Алгоритм работает в недвоичной системе счисления и требует дописывания остатков.

Как обойти ловушку: Напишите вспомогательную функцию `def to_base(n, base): s = ''; while n: s = str(n%base) + s; n //= base; return s or '0'` и переводите обратно через `int(s, base)`.

Лайфхаки и подводные камни на экзамене:

  • Сумма цифр двоичного числа считается одной командой: `b.count('1')`.
  • Диапазона `range(1, 1000)` хватает для 99.9% задач №5 ЕГЭ.
  • Если требуется найти наименьшее R — используйте `min(r for n, r in results)`, если наименьшее N — `min(n for n, r in results)`.
Банк реальных задач №5 Открыть в тренажере СмартКИМ