5 номер. Преобразование записей чисел
Преобразование троичной записи
(Н. Сафронов) На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом:
1. Строится троичная запись числа N.
2. К этой записи дописываются разряды по следующему правилу. Если сумма троичных разрядов кратна 3, слева дописывается 20, иначе 10.
3. Полученная таким образом запись является троичной записью искомого числа R.
Например, для числа 10 троичная запись 101₃ преобразуется в запись 10101₃ = 91, для числа 11 троичная запись 102₃ преобразуется в 20102₃ = 173.
Укажите максимальное значение N, после обработки которого с помощью этого алгоритма получается число R, меньшее чем 100.
Подсказка
Сначала выполните все шаги для одного N, сохраняя строку после каждого изменения. Затем уточните, что требуется выбрать: N, R или количество значений.
Решение
Искомая величина: Укажите максимальное значение N, после обработки которого с помощью этого алгоритма получается число R, меньшее чем 100.
Разделите решение на два действия: для одного входного числа точно воспроизведите алгоритм, затем отберите результаты по условию задачи. Храните запись числа строкой; основание используемой системы счисления — 3.
Суммируйте цифры записи, а не само число. После преобразования запись может измениться: повторный подсчёт выполняйте по новой строке, если именно она названа в условии.
Дописывание справа реализуется как s + suffix, слева — как prefix + s. Добавляйте ровно указанную последовательность символов, включая нули. Числовое сложение вместо соединения строк здесь меняет алгоритм.
После завершения всех преобразований получите числовой результат: R = int(s, 3). Ограничения на величину R проверяйте численно: лексикографический порядок строк не совпадает с порядком чисел.
Отбирайте ту величину, о которой спрашивается в последнем предложении: исходное число и результат алгоритма нельзя подменять друг другом. Для наименьшего входа рассматривайте допустимые N по возрастанию; для наибольшего проверяйте весь обоснованный диапазон.
Строгое «больше» означает >, а «не меньше» — >=; аналогично различайте верхние границы. Диапазон перебора определяйте из ограничений и изменения длины записи, а не произвольной константой. Пример из условия помогает проверить отдельный проход алгоритма.
Ответ: 18.