Задание 14331
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
-
Строится троичная запись числа N.
-
Далее эта запись обрабатывается по следующему правилу:
- а) если сумма цифр этой записи делится на 3, то к этой записи справа дописывается «212»
- б) если сумма цифр на 3 не делится, то она умножается на 2, переводится в троичную запись и дописывается в конец числа
Полученная таким образом запись является троичной записью искомого числа R.
-
Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа 11 = 1023 результатом является число 1022123 = 320, а для исходного числа 12 = 1103 это число 110113 = 112. Укажите минимальное число R, большее 490, которое может быть получено с помощью описанного алгоритма. В ответе запишите это число в десятичной системе счисления
Решение
def f(n):
result = ""
while n != 0:
result = str(n % 3) + result
n = n // 3
return result
a = []
for N in range(1000):
n = f(N)
if sum(map(int, n)) % 3 == 0:
n = n + '212'
else:
n = n + f(sum(map(int, n)) * 2)
R = int(n, 3)
if R > 490:
a.append(R)
print(min(a))
Разбор кода
-
Функция переводит входное число в 3-СС, разбор функции -> перевод в разные СС
-
После проверяем кратна ли сумма цифр 3 при помощи конструкции ->
sum(map(int, n)) % 3 == 0
, где:- функция
map(тип данных, строка/список)
которая преобразует каждый элемент в нужный тип данных - функция
sum(элементы типа int)
суммирует все элементы, которые мы передаем в функцию
- функция
-
В пункте б) мы передаем сумму цифр умноженную на 2 в функцию
f
->f(sum(map(int, n)) * 2)
-
В конце переводим число в 10 СС через функцию int и проверяем, если больше 490, то добавляем его в список
-
Выводим минимальное число из списка через функцию
min()