ЕГЭ Информатика 2024: Задача 5 — разбор и решение

Задание базового уровня, проверяющее умение восстанавливать исходные данные алгоритма по его результатам. На его выполнение отводится 4 минуты.

Условие задачи

Алгоритм получает на вход натуральное число n. Алгоритм строит по нему новое число следующим образом:

  1. Строится двоичная запись числа n.
  2. Эта запись обрабатывается по следующему правилу:
    • Если число n делится на 3, то к двоичной записи дописываются три последние двоичные цифры.
    • Если число n на 3 не делится, то остаток от деления умножается на 3, переводится в двоичную запись и дописывается в конец числа.

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

Решение задачи на языке программирования

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

def solve():
    results = []
    for n in range(1, 1000):  # Диапазон можно изменять
        s = bin(n)[2:] # Строим двоичную запись, отрезаем "0b"
        if n % 3 == 0:
            s += s[-3:]
        else:
            s += bin(n % 3 * 3)[2:]
        decimal_result = int(s, 2)
        if decimal_result > 151:
            results.append(decimal_result)
    return min(results)

print(solve())

Пояснения к коду:

  • Цикл for n in range(1, 1000): перебирает натуральные числа от 1 до 999. Диапазон может быть изменен, если в результате работы программы нужный результат не будет найден.
  • s = bin(n)[2:] преобразует число в двоичную строку и удаляет префикс «0b».
  • Условие if n % 3 == 0: проверяет делимость на 3.
  • s += s[-3:] дописывает три последние цифры, если число делится на 3.
  • s += bin(n % 3 * 3)[2:] дописывает двоичное представление остатка, умноженного на 3, если число не делится на 3.
  • int(s, 2) преобразует двоичную строку в десятичное число.
  • results.append(decimal_result) добавляет полученное число в список результатов.
  • return min(results) возвращает минимальное число из списка.

Использование списка results позволяет избежать вывода всех результатов и последующего поиска минимального значения, что упрощает и ускоряет решение.

Задачу эффективно решает программа, перебирающая числа и применяющая описанный алгоритм. Использование списка для хранения результатов и последующего нахождения минимума обеспечивает быстрое и корректное получение ответа — 163. Важно учитывать, что длина дописываемой части зависит от условия; простой вывод чисел больше 151 может привести к неправильному результату.

Что будем искать? Например,программа