5 номер. Преобразование записей чисел
Алгоритм обработки числа
(О. Лысенков) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится восьмеричная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если восьмеричная запись начинается на 5, то все двойки в записи меняются на единицы, а все единицы меняются на двойки после к числу приписывается 11 слева;
б) если восьмеричная запись начинается не на 5, то к записи справа приписывается 10, а первый разряд полученной записи заменяется на 2.
Полученная таким образом запись является восьмеричной записью искомого числа R.
Укажите максимальное число N, для которого результатом работы алгоритма является наибольшее число R, меньшее 1354.
В ответе это число запишите в десятичной системе счисления.''
Подсказка
Сначала выполните все шаги для одного N, сохраняя строку после каждого изменения. Затем уточните, что требуется выбрать: N, R или количество значений.
Решение
def cc(n): s = '' while n != 0: s = str(n % 8) + s n //= 8 return s def f(n): s = cc(n) if s[0] == '5': s = s.replace('2','*').replace('1','2').replace('*','1') s = '11' + s else: s += '10' s = '2' + s[1:] return int(s,8) #1 способa = []for i in range(1,100000): if f(i) < 1354: a.append([-f(i),-i])a.sort()print(abs(a[0][1]))#2 способmax_el = float('-inf')min_N = 0for i in range(1,100000): if f(i) < 1354: if max_el <= f(i): max_el = f(i) min_N = iprint(min_N)