Тема 5. Алгоритмы – анализ простейших алгоритмов

5.02 Запись числа в другой системе счисления

Вспоминай формулы по каждой теме
Решай новые задачи каждый день
Вдумчиво разбирай решения
ШКОЛКОВО.
Готовиться с нами - ЛЕГКО!
Подтемы раздела алгоритмы – анализ простейших алгоритмов
Решаем задачу:

Ошибка.
Попробуйте повторить позже

Задача 1#72428

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

1. Строится троичная запись числа N.

2. Подсчитывается сумма количества единиц и двоек троичной записи. Если полученное значение чётно, то справа к этой записи дописывается 0, если нечётно – 1.

3. К полученному результату дописывается ещё один бит по тем же правилам.

Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N  ) является троичной записью искомого числа R  . Укажите минимальное число R  , большее 337, которое может быть получено в результате работы этого алгоритма. В ответе это число запишите в десятичной системе.

Показать ответ и решение

В условии задачи нам дан алгоритм, который преобразует натуральное число N в новое число R через операции над троичной записью N. Сначала мы реализуем функцию tr, которая переводит число N в его троичную запись — строку с цифрами 0, 1 и 2. Для этого мы последовательно делим число на 3, собирая остатки от деления, и формируем строку с цифрами в правильном порядке. Далее для каждого числа N от 1 до 99 мы получаем троичную запись, затем считаем сумму количества цифр 1 и 2. Если эта сумма чётна, к записи справа дописываем «0», иначе «1». После этого повторяем подсчёт суммы цифр 1 и 2 для обновлённой записи и аналогично добавляем ещё один символ «0» или «1». Таким образом мы увеличиваем длину записи на два символа. После этого полученную строку интерпретируем как троичное число и переводим в десятичную систему. В процессе перебора мы сохраняем минимальное число R, превышающее 337. По завершении цикла выводим это минимальное подходящее число.

def tr(n):
    x = n  # Копируем число N для преобразования в троичную запись
    s = ’’  # Инициализируем пустую строку для троичной записи
    while x > 0:  # Пока число не уменьшится до 0
        s = str(x % 3) + s  # Добавляем остаток от деления на 3 слева к строке
        x = x // 3  # Делим число на 3 без остатка для следующей итерации
    return s  # Возвращаем полученную троичную запись

mn = 10**10  # Инициализируем переменную для хранения минимального подходящего числа очень большим значением
for n in range(1, 100):  # Перебираем числа от 1 до 99 включительно
    t = tr(n)  # Получаем троичную запись числа N
    # Подсчитываем сумму количества цифр ’1’ и ’2’ в записи
    if (t.count(’1’) + t.count(’2’)) % 2 == 0:
        t += ’0’  # Если сумма чётна, дописываем ’0’
    else:
        t += ’1’  # Иначе дописываем ’1’

    # Повторяем подсчёт суммы для новой записи с добавленным символом
    if (t.count(’1’) + t.count(’2’)) % 2 == 0:
        t += ’0’  # Если сумма чётна, дописываем ’0’
    else:
        t += ’1’  # Иначе дописываем ’1’

    # Переводим полученную троичную запись в десятичное число
    if int(t, 3) > 337:  # Если число больше 337
        mn = min(mn, int(t, 3))  # Обновляем минимальное подходящее число

print(mn)  # Выводим минимальное число R, большее 337

Ответ: 345

Специальные программы

Все специальные программы

Программа
лояльности v2.0

Приглашай друзей в Школково и получай вознаграждение до 10%!

Крути рулетку
и выигрывай призы!

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

Бесплатное онлайн-обучение

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

Налоговые вычеты

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

Специальное предложение
для учителей

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

Вернём деньги за курс
за твою сотку на ЕГЭ

Сдать экзамен на сотку и получить обратно деньги за подготовку теперь вполне реально!

cyberpunkMouse
cyberpunkMouse
Рулетка
Вы можете получить скидку в рулетке!