На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующему правилу:
а) если число N делится на 3, то к этой записи справа дописываются две последние троичные цифры полученной записи;
б) если число N на 3 не делится, то вычисляется сумма цифр полученной троичной записи, эта сумма умножается на 3, переводится в троичную систему счисления и дописывается в конец числа.
Полученная таким образом запись является троичной записью искомого числа R.
3. Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 8 = 223 результатом является число 221103 = 228, а для исходного числа 9 = 1003 результатом является число 100003 = 81.
Укажите число R, ближайшее к 910, которое может быть получено с помощью описанного алгоритма. В ответе запишите это число в десятичной системе счисления.
Приведём решение на языке Python.
def f(n):
s=''
while n > 0:
s = str(n%3) + s
n //= 3
return s
def summac(x):
t = 0
while x > 0:
t += x%10
x //= 10
return t
c = []
for n in range(10, 1000):
s = f(n)
if n%3 == 0:
s = s + s[-2:]
else:
s = s + f(summac(int(s)) * 3)
r = int(str(s),3)
#Если число число не будет найдено, увеличиваем слагаемое 50
if 910 - 50 <= r <= 910 + 50:
c.append(r)
print(c)
Ответ: 921.
Приведём решение Юрия Красильникова на языке Python.
def trs(n): # Троичная система
if n==0:
return '0'
s=''
while n!=0:
s+=str(n%3)
n//=3
return s[::-1]
def f(n): # Алгоритм
s=trs(n)
s=s+s[-2:] if n%3==0 else s+trs(sum(map(int,s))*3)
return int(s,3)
a=[f(n) for n in range(1,1000)]
print(min(a,key=lambda x: abs(x-910)))

