5.01 Запись числа в двоичной системе счисления
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число R следующим
образом.
1) Строится двоичная запись числа
2) К этой записи дописываются разряды по следующему правилу:
а) если число чётное, то к двоичной записи числа в конце дописывается
б) если число нечётное, то к двоичной записи числа в конце дописывается
Полученная таким образом запись является двоичной записью искомого числа . Укажите наибольшее число
меньшее
, которое может получиться после обработки этого алгоритма. В ответе запишите это число в десятичной
записи.
Решение программой
В условии задачи описан алгоритм, который по входному натуральному числу N строит новое число R. Для этого сначала число N преобразуется в двоичную запись — строку из символов ’0’ и ’1’. Префикс ’0b’, который появляется при использовании функции bin(), убирается с помощью среза [2:].
Затем, в зависимости от чётности числа N, к этой двоичной строке дописываются два дополнительных разряда. Если число чётное, то к концу строки приписывается последовательность ’11’, а если нечётное — ’01’. Это реализуется с помощью проверки остатка от деления числа на 2 (i
Полученная таким образом строка интерпретируется как двоичное число и преобразуется в десятичное число с помощью функции int(строка, 2).
Для поиска наибольшего подходящего значения R перебираются все числа N от 0 до 999. Для каждого из них по описанному алгоритму вычисляется число R. Если оно меньше 128 и при этом больше текущего максимального найденного значения, переменная ans обновляется новым значением.
В конце цикла в переменной ans содержится искомое наибольшее число R, удовлетворяющее условию задачи.
# Инициализируем переменную для хранения максимального значения R ans = 0 # Перебираем числа N от 0 до 999 for i in range(1000): # Получаем двоичную запись числа N без префикса ’0b’ s = bin(i)[2:] # Проверяем чётность числа и дописываем соответствующую последовательность if i % 2 == 0: s += ’11’ # Для чётных чисел добавляем ’11’ else: s += ’01’ # Для нечётных чисел добавляем ’01’ # Переводим полученную двоичную строку в десятичное число r = int(s, 2) # Если число R меньше 128 и больше текущего максимума, обновляем максимум if r < 128: ans = max(ans, r) # Выводим наибольшее число R, которое меньше 128 print(ans)
Аналитическое решение
Рассмотрим первое число . Переведем в двоичную сс и получим
. Отрубим две последние цифры и
получим число нечетное, а значит должно было добавиться
. Значит не подходит.
Похоже это число мы сразу можем угадать. У нас есть и к нему должно добавить
. Получаем число
. (Число
также не подходит т.к.
)
Специальные программы

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

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

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

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

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

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