5.02 Запись числа в другой системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующим правилам:
а) если в троичной записи числа содержится хотя бы одна цифра 2, то к этой записи справа дописывается 0;
б) если в троичной записи числа нет цифры 2, то берется последняя цифра числа N, затем делится нацело на 2, переводится в троичную запись и дописываются в конец числа.
Полученная таким образом запись является троичной записью искомого числа R.
Например, для исходного числа результатом является число
, а для исходного числа
результатом является число
.
Укажите минимальное число R, не меньшее 202, которое может быть получено с помощью полученного алгоритма. В ответе запишите это число в десятичной системе счисления.
В условии задачи описан алгоритм, который мы последовательно переводим на язык программирования Python. Для начала создаём функцию f(n, osn), которая принимает число n и основание системы счисления osn, и возвращает строковое представление числа n в системе счисления с этим основанием. В теле основного цикла перебираем значения n от 1 до 199 включительно. Для каждого числа n вычисляем его троичную запись с помощью функции f. Затем проверяем, содержит ли эта запись хотя бы одну цифру 2. Если содержит, то к строке дописываем символ 0. Если же цифры 2 нет, то берём последнюю цифру десятичного числа n (последний символ строки десятичного представления), делим её нацело на 2, переводим полученное число в троичную систему и дописываем результат в конец исходной троичной записи. После этого полученную строку переводим обратно в десятичное число и проверяем, не меньше ли оно 202. Если да, сохраняем результат в множество для дальнейшего поиска минимального. В конце выводим минимальное значение из всех подходящих.
def f(n, osn): # Функция перевода числа n в систему счисления с основанием osn s = "" while n > 0: s += str(n % osn) # Добавляем остаток от деления на основание в строку n //= osn # Делим n на основание, уменьшая число s = s[::-1] # Разворачиваем строку, чтобы получить правильный порядок цифр return s a = set() # Множество для хранения всех подходящих значений R for n in range(1, 200): # Перебираем числа от 1 до 199 включительно s = f(n, 3) # Переводим число n в троичную систему счисления if "2" in s: # Если в троичной записи есть хотя бы одна цифра ’2’ s += "0" # Добавляем ’0’ справа if "2" not in s: # Если цифры ’2’ нет в троичной записи k = (n % 10) // 2 # Берём последнюю цифру числа n и делим нацело на 2 s1 = f(k, 3) # Переводим результат в троичную систему счисления s += s1 # Добавляем к троичной записи число s1 r = int(s, 3) # Переводим полученную троичную строку в десятичное число if r >= 202: # Проверяем, что число не меньше 202 a.add(r) # Добавляем число в множество подходящих результатов print(min(a)) # Выводим минимальное подходящее число R
Специальные программы

Программа
лояльности v2.0
Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!
Крути рулетку и покупай курсы со скидкой, которая привязывается к вашему аккаунту.

Бесплатное онлайн-обучение
Для школьников из приграничных территорий России, проживающих в ДНР, ЛНР, Херсонской, Запорожской, Белгородской, Курской, Брянской областях и Крыму.

Налоговые вычеты
Узнай, как получить налоговый вычет при оплате обучения в «Школково».

Специальное предложение
для учителей
Бесплатный доступ к любому курсу подготовки к ЕГЭ, ОГЭ и олимпиадам от «Школково». Мы с вами делаем общее и важное дело, а потому для нас очень значимо быть чем-то полезными для учителей по всей России!

Вернём деньги за курс
за твою сотку на ЕГЭ
Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!