Информатика: ОГЭ и ЕГЭ

Тренировка ЕГЭ · задание 5 · запись в других системах счисления

Задание 5 ЕГЭ: запись в других системах счисления

Троичная запись числа: построение R. Тема номера — алгоритм построения числа. Ниже — пример с ответом и решением; кнопкой под ним можно решить такую же задачу с другими числами, ответ проверится сразу.

Пример

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
  а) если число N делится на 3, то справа дописываются две последние троичные цифры;
  б) если число N на 3 не делится, то остаток от деления на 3 умножается на 2, переводится в троичную запись и дописывается в конец троичной записи.
Полученная таким образом запись является троичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.

Например, для исходного числа 1410 = 1123 результатом является число 112113 = 13010, а для исходного числа 910 = 1003 это число 100003 = 8110.

Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, не меньшее 375. В ответе запишите это число в десятичной системе счисления.

Ответ42

Решение

Правило проще всего применить программой: строим запись N, обрабатываем её по правилу и переводим результат в десятичную систему. Так как к записи всегда что-то дописывается, R больше N, поэтому перебора N до 999 хватает с запасом.

Для N = 1, 2, … получаем R = 5, 22, 30, 14, 49, 60, 23, 76, 81, 32, … Значения растут неравномерно: разные ветки правила дописывают разное количество разрядов, поэтому нужно проверять все N, а не останавливаться на первом «похожем».

Нужное значение получается при N = 42 = 11203: R = 1120203 = 384. В ответ идёт N: 42.

def tern(n):                        # троичная запись числа
    s = ""
    while n > 0:
        s = str(n % 3) + s
        n //= 3
    return s

def R(n):
    s = tern(n)
    if n % 3 == 0:
        s = s + s[-2:]                  # две последние троичные цифры
    else:
        s = s + tern(n % 3 * 2)
    return int(s, 3)

print(min(n for n in range(1, 1000) if R(n) >= 375))

Решить такую задачу — новый вариант с проверкой

Задание 5 ЕГЭ: другие виды

Все задачи задания 5 вперемешку · разбор: как решать задание 5 · пробные варианты ЕГЭ