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

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

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

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

Задача 1#30303

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

1) Строится шестнадцатеричная запись числа N∕∕2  , где «∕∕  » — операция деления нацело.

2) К этой записи дописывается еще три разряда по следующему правилу:

  а) если N  не делится на 4, то слева к нему приписывается «F  », а справа «A0  ».

  б) в противном случае слева приписывается «15  », а справа «C  ».

Например, N = 410 ⇒ 216 ⇒ 152C16 = 542010 = R  .

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

Укажите наибольшее число N  , для которого результат работы алгоритма меньше 1048576  . В ответ запишите это число в десятичной системе счисления.

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

Для решения задачи нам необходимо перебрать все возможные значения N в убывающем порядке, начиная с 1 000 000, чтобы найти наибольшее такое N, для которого построенное по условию число R будет меньше 1 048 576 (это 2̂20). Для каждого значения N сначала вычисляем целочисленное деление на 2, затем преобразуем полученное число в шестнадцатеричную строку без префикса «0x». Далее, согласно условию, добавляем три символа к полученной строке: если N не делится на 4, то слева приписываем «f», а справа «a0», иначе слева приписываем «15», а справа «c». Полученная таким образом строка представляет собой шестнадцатеричное число R. После этого переводим строку обратно в целое число из шестнадцатеричной системы в десятичную и сравниваем с 1 048 576. Если R меньше этого значения, значит мы нашли нужное максимальное N, выводим его и завершаем цикл. Такой перебор гарантирует, что первое найденное значение будет максимальным подходящим числом.

for i in range(1_000_000, 0, -1):  # Перебор чисел N от 1 000 000 до 1 включительно, в порядке убывания
    s = hex(i // 2)[2:]  # Вычисляем N//2 и переводим в шестнадцатеричную строку без префикса ’0x’
    if i % 4 != 0:  # Если N не делится на 4
        s = ’f’ + s + ’a0’  # Приписываем слева ’f’, справа ’a0’
    else:  # Если N делится на 4
        s = ’15’ + s + ’c’  # Приписываем слева ’15’, справа ’c’
    if int(s, 16) < 1_048_576:  # Переводим строку в целое число из шестнадцатеричной системы и сравниваем с 2̂20
        print(i)  # Выводим найденное максимальное значение N
        break  # Завершаем цикл, ответ найден

Ответ: 511

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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