Автомат обрабатывает натуральное число N по следующему алгоритму.
1. Строится двоичная запись числа N.
2. Удаляется первая слева единица и все следующие непосредственно за ней нули. Если после этого в числе не остаётся цифр, результат этого действия считается равным нулю.
3. Полученное число переводится в десятичную запись.
4. Новое число вычитается из исходного, полученная разность выводится на экран.
Пример. Дано число N = 11. Алгоритм работает следующим образом.
1. Двоичная запись числа N: 1011.
2. Удаляется первая единица и следующий за ней ноль: 11.
3. Десятичное значение полученного числа 3.
4. На экран выводится число
Сколько разных значений будет показано на экране автомата при последовательном вводе всех натуральных чисел
Заметим, что при удалении первой единицы и всех стоящих сразу за ней нулей из числа
Ответ: 6.
Примечание.
Заметим, что при вводе числа, равного степени двойки, на экран будет выведено именно это число (из него удалится первая единица и все следующие за ней нули, результат окажется
Приведём другое решение на языке Python.
a = []
for x in range(100, 3001):
i = int(bin(x)[3:], 2)
if x - i not in a:
a.append(x-i)
print(len(a))

