Задание 5 ЕГЭ по информатике: решайте с автопроверкой

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

Решать задачи номера

Как решать программой

Самый надёжный способ: написать функцию, которая в точности повторяет алгоритм, и перебрать исходные числа по порядку. В Python двоичная запись числа n — это bin(n)[2:], а обратный перевод — это int(s, 2). Для троичной и других систем напишите короткий цикл с делением на основание.

Внимательно читайте, к какой записи применяется правило: к исходной или к уже изменённой. Проверьте свою функцию на числе из примера в условии, прежде чем запускать перебор.

Если ищут наибольшее число с результатом меньше границы, перебирайте все числа до разумного предела и запоминайте последнее подходящее. Результат алгоритма обычно растёт вместе с числом, но не всегда монотонно, поэтому не обрывайте цикл на первой неудаче.

Разбор примера

Автомат по номеру N строит код R: к двоичной записи N с чётным числом цифр дописывает две её первые цифры, с нечётным дважды дописывает последнюю. Найдём наименьшее N, при котором R больше 100.

def R(n):
    b = bin(n)[2:]
    b += b[:2] if len(b) % 2 == 0 else b[-1] * 2
    return int(b, 2)

n = 2
while R(n) <= 100:
    n += 1
print(n)

Программа печатает

25

Для N = 24 двоичная запись 11000 нечётной длины, к ней дописывается 00, и получается 1100000, то есть 96. Для N = 25 запись 11001 превращается в 1100111, это 103, больше 100. Для всех N от 2 до 24 код не больше 100, поэтому ответ 25.

Решить эту задачу

Задачи к заданию 5

  • Почтовый код: длина записи решаетЛёгкаяРешать
  • Наибольший код с обёрткой из единицЛёгкаяРешать
  • Троичный код: наименьший больше границыЛёгкаяРешать
  • Циклический сдвиг и бит чётностиЛёгкаяРешать
  • Сколько шифров не больше границыЛёгкаяРешать
  • Сколько разных кодов на отрезкеЛёгкаяРешать
  • Четверичная запись, граница до 10¹⁴СредняяРешать
  • Разность кода и номераЛёгкаяРешать
  • Инверсия в обёртке из единицЛёгкаяРешать
  • Запись с зеркальным отражениемЛёгкаяРешать
  • Троичная запись и сумма цифрЛёгкаяРешать
  • Удвоенная запись и делимостьЛёгкаяРешать

Бесплатно и без регистрации: пишете код в браузере и проверяете его тестами (без аккаунта — несколько задач в день).

Вопросы и ответы

Как быстро перевести число в двоичную запись?
В Python это bin(n)[2:], обратно int(s, 2). Для других оснований есть int(s, base), а запись в систему с основанием base придётся собрать циклом.
Почему мой ответ отличается на единицу?
Чаще всего путают «больше» и «не меньше» в условии. Сравните знак в цикле с текстом задачи.
С какого числа начинать перебор?
С наименьшего, которое разрешает условие. Если сказано N ≥ 2, начинайте с 2.