5.02 Запись числа в другой системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится троичная запись числа N.
2. Далее эта запись обрабатывается по следующим правилам:
а) если число N делится на 5, то к этой записи справа дописывается 02;
б) если число N не делится на 5, то остаток от деления умножается на 3, это произведение переводится в троичную систему счисления, от него берется две последние цифры и дописываются в конец числа.
Полученная таким образом запись является троичной записью искомого числа R.
Например, для исходного числа результатом является число
, а для исходного числа
результатом является число
.
Укажите минимальное число N, для которого искомое число R равно 192. В ответе запишите это число в десятичной системе счисления.
В условии задачи нам дан алгоритм, который сначала переводит число N в троичную запись. Для удобства и универсальности мы реализовали функцию f(n, osn), которая переводит число n в систему счисления с основанием osn. В теле основного цикла перебираем значения N от 1 до 299, преобразуя каждое в троичную систему счисления с помощью f(n, 3). Если число делится на 5, согласно условию, к полученной троичной записи добавляем справа "02". Если же число не делится на 5, мы берём остаток от деления на 5, умножаем его на 3, затем переводим результат в троичную систему, берём последние две цифры этой записи и добавляем их в конец исходной троичной строки. После этого полученную строку рассматриваем как троичное число и переводим в десятичное целое. Далее проверяем, равен ли этот результат 192. Если равен, выводим текущее число N и прерываем цикл, поскольку нам нужен минимальный такой N. Таким образом мы пошагово реализуем алгоритм из условия, отображая каждую операцию в коде и проверяя необходимое условие.
def f(n, osn): # Функция для перевода числа n в систему счисления с основанием osn s = ’’ while n > 0: s += str(n % osn) # Добавляем остаток от деления на основание в строку n //= osn # Делим n на основание, уменьшая число s = s[::-1] # Разворачиваем строку, чтобы получить правильный порядок цифр return s for n in range(1, 300): # Перебираем числа от 1 до 299 включительно s = f(n, 3) # Переводим число n в троичную систему счисления if n % 5 == 0: # Если число n делится на 5 s += ’02’ # Добавляем к троичной записи справа "02" if n % 5 != 0: # Если число n не делится на 5 k = (n % 5) * 3 # Вычисляем остаток от деления на 5, умноженный на 3 s1 = f(k, 3) # Переводим полученное число в троичную систему счисления s += s1[len(s1)-2:] # Добавляем последние две цифры этой записи к исходной троичной записи r = int(s, 3) # Переводим итоговую троичную строку в десятичное число if r == 192: # Проверяем, равно ли число 192 print(n) # Выводим искомое минимальное число N break # Прекращаем перебор, т.к. ответ найден
Специальные программы

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

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

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

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

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

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