Задание №5: Анализ алгоритмов для исполнителей
Основные типы и прототипы задания №5:
Двоичные автоматы
Троичные и n-ичные автоматы
Поиск минимального N или R
Условие задания
*(В. Шубинкин) Алгоритм получает на вход натуральное число N и строит по нему новое число R следующим образом:
Определите наименьшее число N, при котором результат работы алгоритма R будет больше 100000010. В ответе запишите это число в десятичной системе счисления.
1. Строится запись числа N в системе счисления с основанием 80.
2. Отдельно складываются чётные и нечётные цифры числа. Если чётных или нечётных чисел нет, сумма считается равной нулю.
3. У большей из сумм определяется последняя цифра в системе счисления с основанием 80. Эта цифра приписывается в конец восьмидесятеричной записи числа N.
4. Пункты 2 и 3 повторяются ещё один раз.
Результат переводится в десятичную систему счисления.
Пример. Алгоритм получает число N = 8310 = 1380. Сумма чётных цифр принимается равной нулю (их нет в записи числа), сумма нечётных цифр равна 4 > 0. Число 410 = 480 – заканчивается на цифру 4 в системе счисления с основанием 80; приписываем её к 1380, получаем 13480. Теперь обе суммы равны 4, поэтому в конец приписывается ещё одна цифра 4, получаем 134480 = 53152410.2. Отдельно складываются чётные и нечётные цифры числа. Если чётных или нечётных чисел нет, сумма считается равной нулю.
3. У большей из сумм определяется последняя цифра в системе счисления с основанием 80. Эта цифра приписывается в конец восьмидесятеричной записи числа N.
4. Пункты 2 и 3 повторяются ещё один раз.
Результат переводится в десятичную систему счисления.
Определите наименьшее число N, при котором результат работы алгоритма R будет больше 100000010. В ответе запишите это число в десятичной системе счисления.
Ответ:
156
Шаблон решения на Python
# === Задание 5: Автомат преобразования двоичных чисел ===
for n in range(1, 1000):
b = bin(n)[2:]
if b.count('1') % 2 == 0:
b = b + '0'
b = '10' + b[2:]
else:
b = b + '1'
b = '11' + b[2:]
r = int(b, 2)
if r > 40:
print(f"Ответ: N={n}, R={r}")
break