Условие: Тип 5 № 17370
Автомат обрабатывает натуральное число N по следующему алгоритму:
1. Строится двоичная запись числа N.
2. Удаляется первая слева единица и все следующие непосредственно за ней нули. Если после этого в числе не остаётся цифр, результат этого действия считается равным нулю.
3. Полученное число переводится в десятичную запись.
4. Новое число вычитается из исходного, полученная разность выводится на экран.
Сколько разных значений будет показано на экране автомата при последовательном вводе всех натуральных чисел от 100 до 3000?
Вариант 1: решение через строки
Комментарии к первому варианту решения задачи:
set()
A
, в которое будем добавлять разность нового числа и исходногоset()
разностьA
# Код решения Вариант 1
A = set()
for n in range(100, 3000+1):
s = bin(n)[3:]
s = int(s, 2)
r = n - s
A.add(r)
print(len(A))