Алгоритм получает на вход натуральное число следующим образом:
- Строится двоичная запись числа
.
- Вместо последней (самой правой) двоичной цифры дважды записывается вторая слева цифра двоичной записи.
- Результат переводится в десятичную систему.
Пример. Дано число . Алгоритм работает следующим образом:
- Двоичная запись числа
.
- Вторая слева цифра
, единица в конце записи заменяется на два нуля, новая запись
.
- Результат работы алгоритма
.
При каком наименьшем числе в результате работы алгоритма получится
Показать ответ
for i in range(2, 1000):
n = bin(i)[2:]
n = n[:-1] + n[1] * 2
if int(n, 2) > 92:
print(i)
break
Аналитическое решение:
Давайте перебирать числа , большие, чем
, мы знаем, что получившееся число должно оканчиваться на две одинаковые цифры и эти цифры должны совпадать со второй цифрой слева.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Возможно, так как последние две цифры совпадают, но вторая цифра слева — ноль, а значит её не могли дописать два раза и получить
, значит оно не подходит.
Подойдёт число ? Возможно, так как последние две цифры совпадают, но вторая цифра слева — единица, а значит её не могли дописать два раза и получить
, значит оно не подходит.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Нет, последние две цифры не совпадают.
Подойдёт число ? Возможно, так как последние две цифры совпадают, вторая цифра — единица, и число само заканчивается на две единицы, а значит это число могло быть результатом алгоритма. Значит раньше число выглядело так:
, где вместо икса может быть любая цифра, так как две одинаковые цифры записываются ВМЕСТО последней цифры. Значит минимальным числом будет
.