5 номер. Преобразование записей чисел
Преобразование троичной записи
(О. Лысенков) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если сумма цифр троичная записи кратна 4, то все единицы в записи меняются на 2, а все 2 меняются на единицы, после к числу приписывается 10 слева;
б) если сумма цифр троичной записи не кратна 4, то к записи справа приписывается 20, после второй и третий разряд, полученной записи, меняются на 0 и 2 соответственно, разряды нумеруются слева направо, начиная с 1.
Полученная таким образом запись является троичной записью искомого числа R.
Укажите максимальное число N, для которого результатом работы алгоритма является наименьшее число R, превышающее 302.
В ответе это число запишите в десятичной системе счисления.
Подсказка
Сначала выполните все шаги для одного N, сохраняя строку после каждого изменения. Затем уточните, что требуется выбрать: N, R или количество значений.
Решение
def cc(n): s = '' while n != 0: s = str(n % 3) + s n //= 3 return s def f(n): s = cc(n) sum_digits = sum(map(int,list(s))) if sum_digits % 4 == 0: s = s.replace('1','*').replace('2','1').replace('*','2') s = '10' + s else: s += '20' s = s[0] + '02' + s[3:] return int(s,3) mi = float('inf')ans = 0for i in range(1,100000): if f(i) > 302: if mi >= f(i): mi = f(i) ans = iprint(ans)