result_min = 10000
for n in range(1, 101): #от 1, потому что в задании написано "подается НАТУРАЛЬНОЕ число"
n10 = n
n3 = ""
summa = 0
summa3 = ""
while n10 > 0:
n3 = n3 + str(n10 % 3)
n10 //= 3
n3 = n3[::-1]
if n10 % 3 == 0:
n3 = n3 + n3[-2:]
else:
for sym in n3:
summa = summa + int(sym)
while summa > 0:
summa3 = summa3 + str(summa % 3)
summa //= 3
summa3 = summa3[::-1]
n3 = str(n3) + summa3 #строка
R = int(n3, 3)
if R > 220:
if R % 2 == 0:
result_min = min(result_min, R) # можешь просто вывести все R и посмотреть какой самый маленький
print(result_min)
Очень плохой код, надеюсь, что-то понятно
n10 = n
n3 = ''
t = ''
c = 0
while n10 > 10:
n3= str(n10 % 3)
n10 //= 3
n3 = n3[::-1]
if n10 % 3 == 0:
c += n3[-2:]
else:
c += sum(n10)
while c > 0:
t += str(c % 3)
c //= 3
t = t[::-1]
n3 += t
r10 = int(n3, 3)
print(r10)
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим
образом:
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи дописываются две последние троичные цифры;
б) если число N на 3 не делится, то вычисляется сумма цифр полученной троичной записи, эта сумма
переводится в троичную систему счисления и дописывается в конец числа.
Полученная таким образом запись является троичной записью искомого числа R. Укажите минимальное
чётное число R, большее 220, которое может быть получено с помощью описанного алгоритма. В ответе
запишите это число в десятичной системе счисления.