Решение: Максимальное число по алгоритму
Ниже на пяти языках программирования записан алгоритм. Получив на вход натуральное десятичное число $x$, этот алгоритм печатает два числа: $L$ и $M$. Укажите наибольшее число $x$, при вводе которого алгоритм выводит сначала $12$, а потом $3$.
1x = int(input()) 2L = 1 3M = 0 4while x > 0: 5 M = M + 1 6 if x % 2 == 0: 7 L = L * (x % 8) 8 x = x // 8 9print(L) 10print(M)
Решение по шагам
4 шагаПри каждой итерации алгоритм заменяет $x$ на $x \mathbin{//} 8$, поэтому остатки $x \bmod 8$ являются цифрами исходного числа в восьмеричной системе. Число итераций $M=3$ означает, что у числа ровно три восьмеричные цифры.
В произведение $L$ входят только чётные восьмеричные цифры. Их произведение должно быть равно $12$. Из возможных чётных цифр $0, 2, 4, 6$ подходит набор $2$ и $6$, так как $2 \cdot 6 = 12$.
Третья цифра должна быть нечётной, чтобы не изменять произведение. Для получения наибольшего числа выбираем максимальную нечётную цифру $7$ и располагаем цифры в порядке убывания: $762_8$.
Переведём число в десятичную систему счисления: $7 \cdot 8^2 + 6 \cdot 8 + 2 = 448 + 48 + 2 = 498$.
Где здесь ошибаются
Считать, что алгоритм работает с десятичными цифрами, а не с остатками при делении на $8$.
Забыть, что нечётная цифра не входит в произведение $L$.
Расположить цифры не в порядке, дающем максимальное число.