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

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

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

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

Задача 1#30265

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

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

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

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

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

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

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

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

В условии задачи описан алгоритм, который по входному натуральному числу 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)

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

Рассмотрим первое число = 127  . Переведем в двоичную сс и получим 11111112  . Отрубим две последние цифры и получим число нечетное, а значит должно было добавиться 01  . Значит не подходит.

Похоже это число мы сразу можем угадать. У нас есть 11111
     2  и к нему должно добавить 01
  2  . Получаем число 11111012 = 125  . (Число 126  также не подходит т.к. = 11111102  )

Ответ: 125

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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