Автомат обрабатывает натуральное число N по следующему алгоритму:
1. Строится двоичная запись числа .
2. Складываются все цифры полученной двоичной записи. В конец записи (справа) дописывается остаток от деления полученной суммы на .
3. Предыдущий пункт повторяется для записи с добавленной цифрой.
4. Результат переводится в десятичную систему и выводится на экран.
Пример. Дано число . Алгоритм работает следующим образом:
1. Двоичная запись числа .
2. Сумма цифр двоичной записи , остаток от деления на
равен
, новая запись
.
3. Сумма цифр полученной записи , остаток от деления на
равен
, новая запись
.
4. На экран выводится число .
Какое наименьшее число, большее вашего балла на ЕГЭ (), может появится на экране в результате работы автомата?
for i in range(1000000):
s = bin(i)[2::]
s += str(s.count(’1’) % 2)
s += str(s.count(’1’) % 2)
if int(s, 2) > 100:
print(int(s, 2))
break
Аналитическое решение:
Имеется число . Все числа в двоичной записи складываются и добавляется остаток от деления на 2 этой суммы, то есть цифра 0 или 1, значит если сумма чётна, то дописываем 0, иначе 1. Если мы дописали единичку, то количество единиц увеличится на 1, а значит, что после этого сумма будет чётна, и уже в следующем пункте мы допишем нолик. Если мы дописали ноль, то сумма числа не меняется, а значит в следующем пункте мы также допишем нолик. Значит число в 2 СС заканчивается на 00 или 10.
Нам необходимо найти число, большее, чем 100, которое в 2 СС заканчивается на 00 или 10. Будем перебирать с минимального.
Подойдет ли число ? Нет, оно кончается на 01.
Подойдет ли число ? Да, так как оно заканчивается на 10. Значит это и есть наш ответ.