Автомат получает на вход натуральное число N, не превышающее 10 000. По этому числу строится новое число R по следующим правилам.
1. Вычисляется число P — произведение всех ненулевых цифр числа N.
2. Вычисляется число M — сумма максимальной и минимальной цифр в записи числа N.
3. Вычисляется T1: T1 = P + M.
4. Вычисляется T2: T2 = P × M.
Новое число R получается в результате записи рядом без пробелов чисел T1 и T2 таким образом, чтобы они следовали слева направо в неубывающем порядке.
Пример. Исходное число N = 234
P = 2 × 3 × 4 = 24
M = 2 + 4 = 6
T1 = 24 + 6 = 30
T2 = 24 × 6 = 144
Результат: R = 30144
Укажите наибольшее число N, при обработке которого автомат выдаст число R = 23126.
Приведём решение на языке Python.
for n in range(10000, 1, -1):
t = list(str(n))
tno0 = [int(i) for i in t if i != '0']
t0 = [int(i) for i in t]
p = 1
for i in tno0:
p *= i
m = int(max(t0)) + int(min(t0))
t1 = p + m
t2 = p * m
r = str(min(t1,t2))+str(max(t1,t2))
if r == '23126':
print(n)
break
Ответ: 72.
Приведём решение Юрия Красильникова на языке Python.
def f(n):
s=str(n)
mind,maxd,p=10,0,1
for c in s:
k=int(c)
mind=min(mind,k)
maxd=max(maxd,k)
if k!=0: p*=k
m=maxd+mind
t1=p+m
t2=p*m
return int(str(t1)+str(t2))
for n in range(100000,0,-1):
if f(n)==23126:
print(n)
break
Приведём решение Сергея Донец на PascalABC:
uses School;
begin
for var i:= 10000 downto 1 do begin
var d:=i.Digits;
var P:=d.Where(x->x<>0).Product;
var M:=d.Max+d.Min;
var T1:=P+M;
var T2:=P*M;
if T1.ToString+T2='23126'
then begin
Print(i);exit;//Ответ: 72.
end;end;
end.

