Задание 20486
(М. Попков) На вход алгоритма подаётся натуральное число N>3. Алгоритм строит по нему новое число R следующим образом.
- Строится двоичная запись числа N.
- К этой записи дописываются ещё три разряда по следующему правилу:
- если N чётное, то к нему справа приписываются три его первые цифры двоичной записи
- если N нечётное, то к нему слева приписывается 1, а справа приписывается 01
Укажите минимальное число R, которое превышает число 600 и может являться результатом работы данного алгоритма. В ответе это число запишите в десятичной системе счисления
Решение
a = []
for N in range(3, 1000):
n = bin(N)[2:] # не забываем про срез
if N % 2 == 0:
n = n + n[0:3]
else:
n = '1' + n + '01'
R = int(n, 2)
if R > 600:
a.append(R)
print(min(a))
Разбор работы кода
- Создаём пустой список
a
для хранения значенийR
, превышающих 600 - Цикл
for N in range(3, 1000):
перебирает натуральные числаN > 3
bin(N)[2:]
переводитN
в двоичную систему и убирает приставку'0b'
- Определяем четность
N
:- Если чётное (
N % 2 == 0
), добавляем первые три цифры двоичной записи в конец - Если нечётное, добавляем
1
в начало и01
в конец
- Если чётное (
int(n, 2)
преобразует двоичную строку обратно в десятичное числоR
- Если
R > 600
, добавляем его вa
- Выводим
min(a)
— минимальноеR
, которое больше 600