Задание 5. Информатика. ЕГЭ. Поляков-6861
- Просмотры: 62
- Изменено: 24 февраля 2025
*(В. Шубинкин) Алгоритм получает на вход натуральное число \(N\) и строит по нему новое число \(R\) следующим образом:
- Строится запись числа \(N\) в системе счисления с основанием \(45.\)
- Цифры числа нумеруются слева направо, начиная с единицы. Отдельно складываются цифры, стоящие на чётных местах, и цифры, стоящие на нечётных местах.
- Запись меньшей из сумм в системе счисления с основанием \(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\)