Решение: Максимальное число по цифрам
Ниже на четырёх языках программирования записан алгоритм. Получив на вход число $x$, этот алгоритм печатает два числа: $S$ и $P$. Укажите наибольшее число $x$, при вводе которого алгоритм печатает сначала 8, а потом 4.
1x = int(input()) 2P = 1 3S = 0 4N = 0 5while x > 0: 6 N = N + 1 7 S = S + (x % 3) 8 P = P * (x % 3) 9 x = x // 3 10S = S + N 11P = P + N 12print(S) 13print(P)
Решение по шагам
4 шагаНа каждом шаге алгоритм получает очередную цифру числа $x$ в троичной системе счисления: это остаток от деления на 3. Обозначим количество троичных цифр через $N$, их сумму через $A$, а произведение через $B$.
$$S = A + N = 8,\quad P = B + N = 4$$Рассмотрим возможные значения $N$. При $N = 1$ произведение цифр должно быть 3, что невозможно для троичной цифры. При $N = 2$ сумма цифр должна быть 6, что также невозможно. При $N = 3$ произведение должно быть 1, поэтому все цифры равны 1, но их сумма равна 3, а не 5.
$$A = 8 - N,\quad B = 4 - N$$При $N = 4$ сумма цифр должна быть 4, а произведение — 0. Значит, среди четырёх цифр есть ноль. Чтобы получить наибольшее число, располагаем цифры по убыванию: $2,2,0,0$.
$$2 + 2 + 0 + 0 = 4,\quad 2 \cdot 2 \cdot 0 \cdot 0 = 0$$Переведём число $2200_3$ в десятичную систему счисления.
$$x = 2 \cdot 3^3 + 2 \cdot 3^2 = 54 + 18 = 72$$Где здесь ошибаются
Считать остатки цифрами десятичной записи числа.
Не учитывать, что к сумме и произведению цифр прибавляется количество цифр $N$.
Расположить цифры не в порядке, обеспечивающем максимальное число.