Задание №5: Анализ алгоритмов для исполнителей
Основные типы и прототипы задания №5:
Двоичные автоматы
Троичные и n-ичные автоматы
Поиск минимального N или R
Условие задания
На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.
1. Строится двоичная запись числа N.
2. Подсчитывается количество единиц и количество нулей в полученной двоичной записи.
3. Эти числа переводятся в двоичную систему и записываются друг за другом без использования ведущих нулей: сначала количество единиц, затем количество нулей.
Полученная таким образом запись является двоичной записью искомого числа R. Укажите минимальное число N, для которого результатом работы алгоритма будет число 314. В ответе запишите это число в десятичной системе счисления.
2. Подсчитывается количество единиц и количество нулей в полученной двоичной записи.
3. Эти числа переводятся в двоичную систему и записываются друг за другом без использования ведущих нулей: сначала количество единиц, затем количество нулей.
Ответ:
268697599
Решение на Python: Идём от R обратно к N
r = bin(314)[2:] best = 10 ** 20 for cut in range(1, len(r)): left = r[:cut] right = r[cut:] if right[0] == "0": continue ones = int(left, 2) zeros = int(right, 2) n = int("1" + "0" * zeros + "1" * (ones - 1), 2) best = min(best, n) print(best)
Этот код разобран по шагам в разборе задания №5: там же типичные ошибки и лайфхаки.