5.01 Двоичная запись числа
Готовиться с нами - ЛЕГКО!
Ошибка.
Попробуйте повторить позже
На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим
образом.
- Строится двоичная запись числа
.
-
Далее эта запись обрабатывается по следующему правилу:
- если число чётное, то к двоичной записи числа слева дописывается 10;
- если число нечётное, то к двоичной записи числа слева дописывается 1 и справа дописывается 01.
Полученная таким образом запись является двоичной записью искомого числа
.
- Результат переводится в десятичную систему и выводится на экран.
Например, для исходного числа результатом является число
, а для исходного числа
результатом будет являться число
.
Укажите минимальное число N, после обработки которого с помощью этого алгоритма получается число R, большее,
чем . В ответе запишите это число в десятичной системе счисления.
Источники:
Решение программой
В условии задачи описан алгоритм, для поиска подходящего числа необходимо «перевести» этот алгоритм с
естественного языка на язык программирования Python. Сначала переводим число
в двоичную строку с
помощью функции bin, затем выясняем, делится ли
на 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)) # Выведем ответ