Решение: Анализ алгоритма в восьмеричной системе
Получив на вход натуральное десятичное число $x$, алгоритм печатает два числа: $L$ и $M$. Укажите наибольшее число $x$, при вводе которого алгоритм печатает сначала $2$, а потом $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 шагаКаждое выполнение цикла увеличивает $M$ на единицу, а затем заменяет $x$ на целую часть от деления на $8$. Поэтому $M$ равно количеству цифр исходного числа в восьмеричной системе. При $M = 3$ число имеет вид трёхзначного восьмеричного числа.
$$x = (abc)_8$$На каждой итерации проверяется чётность текущего $x$. Она совпадает с чётностью очередной цифры восьмеричной записи. Для чётной цифры множитель равен этой цифре, а нечётные цифры в произведение не входят.
Чтобы получить $L = 2$, произведение всех чётных цифр должно быть равно $2$. Значит, одна из цифр равна $2$, а две остальные должны быть нечётными. Для максимального числа цифру $2$ ставим в разряд единиц, а в остальные разряды ставим наибольшие нечётные цифры $7$.
Получаем $x = (772)_8$. Переводим число в десятичную систему:
$$x = 7 \cdot 8^2 + 7 \cdot 8 + 2 = 448 + 56 + 2 = 506$$Где здесь ошибаются
Считать, что $M$ равно количеству чётных цифр, хотя оно равно числу итераций цикла.
Размещать цифру $2$ не в младшем, а в старшем разряде.
Забывать перевести найденное восьмеричное число $772_8$ в десятичную систему.