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

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

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

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

Задача 1#54918

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

  1. Строится двоичная запись числа N.
  2. Подсчитывается количество нулей, стоящих на нечётных местах и количество единиц, стоящих на чётных в двоичной записи числа N без ведущих нулей. Отсчёт производится слева направо. Старший разряд считать нулевой позицией.
  3. Результатом становится произведение полученных двух чисел.

При каком наименьшем N в результате работы алгоритма получится R = 12?

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

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

В условии задачи описан алгоритм, для поиска подходящего числа N необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N в двоичную строку с помощью bin(), затем анализируем позиции цифр в этой записи, учитывая, что индексация в Python нчинается с 0. Подсчитываем количество нулей на нечетных позициях и количество единиц на четных позициях, проходясь циклом for по индексам строки двоичной записи числа.

Далее организуем перебор чисел N в цикле for. Находим произведение количества подходящих нулей и подходящих единиц и проверяем, равно ли оно 12. Если условие выполняется, выводим текущее N и завершаем поиск.

for n in range(2, 10000): # Перебираем все числа N от 1 до 9999
    r = bin(n)[2:] # Получаем двоичную запись N (без префикса ’0b’)
    sone = 0 # Переменная для подсчета количества подходящих единиц текущего числа
    szero = 0 # Переменная для подсчета количества подходящих нулей текущего числа
    for i in range(len(r)): # Перебираем все индексы в записи числа
        if i % 2 != 0 and r[i] == "0": # Если индекс нечетный и символ с данным индексом 0,
            sone += 1 # Увеличиваем счетчик
        elif i % 2 == 0 and r[i] == "1": # Если индекс четный и символ с данным индексом 1,
            szero += 1 # Увеличиваем счетчик
    if sone*szero == 12: # Вычисляем результат и проверяем, равен ли он 12
        print(n) # Выводим подходящее N
        break # Останавливаем цикл

Ответ: 85

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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