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

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

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

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

Задача 1#30292

Автомат обрабатывает натуральное число N < 128  по следующему алгоритму:

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

2) Инвертируются разряды исходного числа (0 заменяется на 1, 1 на 0).

3) К полученному двоичному числу прибавляют единицу.

4) Полученное число переводится в десятичную систему счисления.

Для какого числа N результат работы алгоритма равен 130?

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

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Первым делом переводим число N в двоичную строку с помощью функции bin, при чём нас интересует восьмибитная двоичная запись, в ней всегда 8 символов, если меньше - нужно добавить в начало нули (например, 111 -> 00000111). Количество необходимых нулей вычисляется по формуле: 8 - длина двоичной записи. Далее создаём пустую строку, в которой сохраним инвертированное число. Проходимся по каждой цифре двоичной записи, если встретили 1, добавляем в новую строку 0 и наоборот. Единицу удобнее добавить после перевода в десятичную запись, так и сделаем, после чего сравним полученное число с 130 и выведем N, если это так.

for i in range(1, 128):  # Перебор значений N от 1 до 127
    s = "0" * (8 - len(bin(i)[2::])) + bin(i)[2::]
    # Добавляем необходимое количество нулей в начало, чтобы запись имела 8 бит (цифр)

    x = ""  # Строка для хранения инвертированной записи
    for j in range(len(s)):  # Проходимся по каждому индексу
        if s[j] == "1":  # Получаем цифру по индексу j и сравниваем с 1
            # Если встречаем 1, добавляем 0 и наоборот
            x += "0"
        else:
            x += "1"
    if (int(x, 2) + 1) == 130:  # Добавляем единицу и сравниваем с нужным числом
        print(i)  # Выводим ответ


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

Необходимо найти такое N  , что после работы алгоритма мы получим 130. Давайте размотаем алгоритм с конца: в конце алгоритм добавляет единицу, а значит отнимём её и получим число 129
   10  . В 2 СС это число выглядит так 100000012  . Инвертируем биты обратно, получим число 011111102  , ведущий ноль не отбрасываем, так как алгоритм строил восьмибитную(то есть состояющую из 8 цифр в двоичной СС) запись. Значит изначальное число равнялось 01111110 = 126
        2     10  .

Ответ: 126

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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