На вход алгоритма подаётся натуральное число . Алгоритм строит по нему новое число
следующим образом.
1) Строится двоичная запись числа
2) К этой записи дописываются разряды по следующему правилу:
а) если число чётное, то к двоичной записи числа в конце дописывается
б) если число нечётное, то к двоичной записи числа в конце дописывается
Полученная таким образом запись является двоичной записью искомого числа . Укажите наибольшее число
, меньшее
, которое может получиться после обработки этого алгоритма. В ответе запишите это число в десятичной записи.
Решение №1
Рассмотрим первое максимально возможное число , меньшее
, а именно
. Переведем в двоичную систему счисления и получим
. Уберём две последние цифры и получим нечетное число, а значит к исходному числу
должно было добавиться
. Значит, число
не могло получиться в результате работы алгоритма.
Теперь мы сразу можем угадать число . У нас есть
, и к нему нужно добавить
. Получаем число
.
Решение №2
ans = 0
for i in range(1000):
s = bin(i)[2::]
if i % 2 == 0:
s += ’11’
else:
s += ’01’
if int(s, 2) < 128:
ans = max(ans, int(s, 2))
print(ans)