Автомат обрабатывает натуральное число N по следующему алгоритму:
1. Строится двоичная запись числа N.
2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления полученной суммы на 2.
3. Предыдущий пункт повторяется для записи с добавленной цифрой.
4. Результат переводится в десятичную систему и выводится на экран.
Пример. Дано число N = 13. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1101.
2. Сумма цифр двоичной записи 3, остаток от деления на 2 равен 1, новая запись 11011.
3. Сумма цифр полученной записи 4, остаток от деления на 2 равен 0, новая запись 110110.
4. На экран выводится число 54.
Сколько различных чисел, принадлежащих отрезку [210; 260], могут появиться на экране в результате работы автомата?
Ответы
Программа:
Python:
from sys import maxsize
def toBin(n):
N_bin = ''
while n > 0:
tmp = str(n % 2)
N_bin = tmp + N_bin
n = int(n / 2)
return N_bin
def Operation(n):
N = 0
for i in str(n):
N += int(i)
N = str(n) + str(N % 2)
return N
def toDec(n):
lngth = len(n)
numDec = 0
for i in range(0, lngth):
numDec += int(n[i]) * (2**(lngth - i - 1))
return numDec
count = 0
for N in range(1, maxsize):
N = toDec(Operation(Operation(toBin(N))))
if N >= 210 and N <= 260:
count += 1
print(N)
if N == 260:
print(N)
break
if N > 260:
count -= 1
print(f'{count} чисел от 210 до 260 было выведено.')
Вывод:
210
212
216
222
226
228
232
238
240
246
250
252
258
260
260
14 чисел от 210 до 260 было выведено.