Тема 5. Простейшие исполнители и алгоритмы

5.01 Двоичная запись числа

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

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

Задача 1#137632Максимум баллов за задание: 1

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

  1. Строится двоичная запись числа N  .
  2. Далее эта запись обрабатывается по следующему правилу:

    1. если число чётное, то к двоичной записи числа слева дописывается 10;
    2. если число нечётное, то к двоичной записи числа слева дописывается 1 и справа дописывается 01.

    Полученная таким образом запись является двоичной записью искомого числа R  .

  3. Результат переводится в десятичную систему и выводится на экран.

Например, для исходного числа 4  = 100
 10      2  результатом является число 20  = 10100
  10        2  , а для исходного числа 510 = 1012  результатом будет являться число 5310 = 1101012  .

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

Источники: Досрок 2024

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

Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа R  необходимо «перевести» этот алгоритм с естественного языка на язык программирования Python. Сначала переводим число N  в двоичную строку с помощью функции bin, затем выясняем, делится ли N  на 2, используя оператор взятия остатка (%). Если делится, то есть остаток равен нулю, дописываем в начало двоичной записи 10. Если не делится, дописываем 1 слева и 01 справа. В завершение переводим результат в десятичную систему счисления, получаем R.

Если R > 516, как сказано в условии, внесём его в список otv, где будем хранить все подходящие числа. Переберём циклом первые 1000 чисел N и выведем минимальное подходящее R из списка.

otv = [] # Список с подходящими числами
for n in range(1000): # Перебор первых 1000 чисел N
    s = bin(n)[2:] # Перевод в двоичную систему счисления
    if n % 2 == 0: # Проверка на чётность
        s = "10" + s # Допишем 10 слева
    else: # Иначе 1 слева и 01 справа
        s = "1" + s + "01"
    r = int(s, 2) # Перевод в десятичную систему счисления
    if r > 516: # Если число получилось больше 516
        otv.append(n) # Добавим в список
print(min(otv)) # Выведем ответ

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