Задание 5. Информатика. ЕГЭ. Поляков-6861

Просмотры: 62
Изменено: 24 февраля 2025

*(В. Шубинкин) Алгоритм получает на вход натуральное число \(N\) и строит по нему новое число \(R\) следующим образом:

  1. Строится запись числа \(N\) в системе счисления с основанием \(45.\)
  2. Цифры числа нумеруются слева направо, начиная с единицы. Отдельно складываются цифры, стоящие на чётных местах, и цифры, стоящие на нечётных местах.
  3. Запись меньшей из сумм в системе счисления с основанием \(45\) приписывается в начало числа, запись большей из сумм в системе счисления с основанием \(45\) – в конец. В случае появления ведущего нуля, он игнорируется.

Результат переводится в десятичную систему счисления.

Пример. Алгоритм получает число \(N = 95_{10} = 25_{45}.\) Цифра \(2\) стоит на позиции № 1, цифра \(5\) – на позиции № 2. Сумма цифр на чётных местах равна \(5_{45},\) сумма цифр на нечётных местах равна \(2_{45}.\) Приписывая цифры, получаем число \(2255_{45} = 186530_{10}.\)

Какое наименьшее число может получиться в результате работы алгоритма при вводе \(N > 1000?\) В ответе запишите это число в десятичной системе счисления.

Решение:

Python


from itertools import count

def conv(n):
    ans = []
    while n:
        ans.append(n % 45)
        n //= 45
    return ans[::-1]

def R(N):
    tmp = conv(N)
    s = [conv(sum(tmp[1::2])), conv(sum(tmp[::2]))]
    s.sort()
    tmp += s[1]
    if s[0]:
        tmp = s[0] + tmp

    ans = sum(n * 45**p for  n, p in zip(tmp[::-1], count(0)))
    return ans

print(min(R(x) for x in range(1001, 10_000)))

Ответ: \(46598\)