503.py

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом. Строится троичная запись числа N. Далее эта запись обрабатывается по следующему правилу: a) если число N делится на 3, то слева к нему приписывается «1», а справа дописывается «02»; б) если число N на 3 не делится, то остаток от деления на 3 умножается на 4, переводится в троичную запись и дописывается в конец числа. Полученная таким образом запись является троичной записью искомого числа R. Результат переводится в десятичную систему и выводится на экран. Укажите максимальное число N, после обработки которого с помощью этого алгоритма получается число R, меньшее 100.
"""
На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.

    Строится троичная запись числа N.
    Далее эта запись обрабатывается по следующему правилу:
    a) если число N делится на 3, то слева к нему приписывается «1»,
    а справа дописывается «02»;
    б) если число N на 3 не делится, то остаток от деления на 3 умножается на 4,
    переводится в троичную запись и дописывается в конец числа.

    Полученная таким образом запись является троичной записью искомого числа R.
    Результат переводится в десятичную систему и выводится на экран.

Укажите максимальное число N, после обработки которого
с помощью этого алгоритма получается число R, меньшее 100.
"""

def to_3(N):
    n3 = "" # пустая строка для троичной записи числа N
    while N > 0: # переводим число n в троичную систему
        n3 += str(N % 3) # добавляем остаток от деления в троичную запись
        N //= 3 # делим число N на 3
    return n3[::-1] # переворачиваем строку для получения правильной троичной записи


for N in range(1000, 0, -1): 
    if N % 3 == 0: # если число N делится на 3
        s = "1" + to_3(N) + "02" # слева к нему приписывается «1», а справа дописывается «02»
    else: # если число N не делится на 3
        s = to_3(N) + to_3((N % 3) * 4) # остаток от деления на 3 умножается на 4, переводится в троичную запись и дописывается в конец числа
    R = int(s, 3) # переводим троичную запись в десятичную систему
    if R < 100: # если число R меньше 100
        print(N) # выводим число N
        break # выходим из цикла

    """
    Ответ: 10
    """
"""
На вход алгоритма подаётся натуральное число N.
Алгоритм строит по нему новое число R следующим образом.

    Строится троичная запись числа N.
    Далее эта запись обрабатывается по следующему правилу:
    a) если число N делится на 3, то слева к нему приписывается «1»,
    а справа дописывается «02»;
    б) если число N на 3 не делится, то остаток от деления на 3 умножается на 4,
    переводится в троичную запись и дописывается в конец числа.

    Полученная таким образом запись является троичной записью искомого числа R.
    Результат переводится в десятичную систему и выводится на экран.

Укажите максимальное число N, после обработки которого
с помощью этого алгоритма получается число R, меньшее 100.
"""

def to_3(N):
    n3 = "" # пустая строка для троичной записи числа N
    while N > 0: # переводим число n в троичную систему
        n3 += str(N % 3) # добавляем остаток от деления в троичную запись
        N //= 3 # делим число N на 3
    return n3[::-1] # переворачиваем строку для получения правильной троичной записи


for N in range(1000, 0, -1): 
    if N % 3 == 0: # если число N делится на 3
        s = "1" + to_3(N) + "02" # слева к нему приписывается «1», а справа дописывается «02»
    else: # если число N не делится на 3
        s = to_3(N) + to_3((N % 3) * 4) # остаток от деления на 3 умножается на 4, переводится в троичную запись и дописывается в конец числа
    R = int(s, 3) # переводим троичную запись в десятичную систему
    if R < 100: # если число R меньше 100
        print(N) # выводим число N
        break # выходим из цикла

    """
    Ответ: 10
    """

Репозиторий на GitHub