Автомат обрабатывает натуральное число N по следующему алгоритму.
1. Строится двоичная запись числа N.
2. Если N четное, то в конец полученной записи (справа) дописывается 0, в начало — 1; если N нечётное, в конец и начало дописывается по две единицы.
3. Результат переводится в десятичную систему и выводится на экран.
Пример. Дано число N = 13. Алгоритм работает следующим образом:
1. Двоичная запись числа N: 1101.
2. Число нечетное, следовательно, по две единицы по краям — 11110111.
3. На экран выводится число 247.
Укажите наименьшее число,
Переведем 5210 в двоичную систему счисления, получим 1101002. Найдем два числа — минимальное четное, из которого можно получить двоичную последовательность такой же длины, и минимальное нечетное.
Для четного:
110100 -> 1010 из такого числа получается 110100, что равно исходному, нам необходимо найти бОльшее значение. Следующее четное значение — 1100, при его преобразовании получим 1110002 = 5610.
Для нечетного:
110100 -> 01 -> 1. Однако из такого числа получится 11111, что меньше заданного. Поэтому найдем минимальное двузначное нечетное двоичное число: 11 -> 1111112 = 6310.
Таким образом, минимальное из найденных значений — 56.
Ответ: 56.
Приведем другое решение.
Заметим, что число, полученное в результате работы автомата, должно оканчиваться либо
Проверим последовательно числа,
5310 = 1101012 — не подходит, оканчивается на 01.
5410 = 1101102 — не подходит, оканчивается на 10.
5510 = 1101112 — не подходит, поскольку может быть получено только из числа 012, а исходное число не может начинаться
5610 = 1110002 — подходит, получается из числа 11002.
Таким образом, минимальное число, которое может являться результатом работы алгоритма,
Приведём другое решение на языке Python.
a = []
for n in range(1, 100):
s = bin(n)[2:] # перевод в двоичную систему
s = str(s)
if n % 2 == 0:
s = "1" + s + "0"
else:
s = "11" + s + "11"
r = int(s, 2) # перевод в десятичную систему
if r > 52:
a.append(r)
print(min(a))

