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

5.01 Запись числа в двоичной системе счисления

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

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

Задача 1#27672

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

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

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

а) если число чётное, то к двоичной записи числа в конце дописывается 11

б) если число нечётное, то к двоичной записи числа в конце дописывается 01

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

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

Решение программой

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

Первым шагом алгоритма является преобразование числа N в двоичную строку. Это можно сделать с помощью функции bin() и удаления префикса ’0b’ срезом [2:].

Далее к полученной двоичной строке дописываются два дополнительных бита. Если число N чётное, к строке добавляется ’11’. Если нечётное — добавляется ’01’. Это реализуется через проверку остатка от деления числа на 2: если i

Получившуюся строку считаем новой двоичной записью числа R. Эту строку преобразуем обратно в десятичное число с помощью функции int(строка, 2).

Чтобы найти наибольшее подходящее число R, перебираем значения N в разумном диапазоне (например, до 1000), и среди всех полученных чисел R, которые строго меньше 128, сохраняем максимальное значение.

ans = 0  # Переменная для хранения максимального подходящего значения R

# Перебираем значения N от 0 до 999
for i in range(1000):
    s = bin(i)[2::]  # Получаем двоичную строку без префикса ’0b’

    # Дописываем к строке два бита в зависимости от чётности числа
    if i % 2 == 0:
        s += ’11’
    else:
        s += ’01’

    # Преобразуем строку в десятичное число
    r = int(s, 2)

    # Если число R меньше 128 — проверяем, является ли оно новым максимумом
    if r < 128:
        ans = max(ans, r)

print(ans)  # Выводим наибольшее возможное значение R, меньшее 128

 

Аналитическое решение:

Рассмотрим первое максимально возможное число R  , меньшее 128  , а именно 127  . Переведем в двоичную систему счисления и получим 11111112  . Уберём две последние цифры и получим нечетное число, а значит к исходному числу N  должно было добавиться 01  . Значит, число R = 127  не могло получиться в результате работы алгоритма.

Теперь мы сразу можем угадать число R  . У нас есть 11111
    2  , и к нему нужно добавить 01
  2  . Получаем число 11111012 = 125  .

 

Ответ: 125

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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