Задание №5 — Анализ простейших алгоритмов
Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам.
1) Перемножаются все цифры исходного числа.
2) Суммируются все цифры исходного числа.
3) Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей).
Пример. Исходное число: 621. Произведение цифр: сумма цифр: Результат: 129.
Укажите наибольшее число, при обработке которого автомат выдаст число 33621.
Правильный ответ
876
Пояснение
Решение:
Автомат приписывает друг к другу произведение цифр P и сумму цифр S, причём первым записывается большее из этих чисел. Значит, строку 33621 надо разрезать на две части так, чтобы первая часть была не меньше второй.
Сумма трёх цифр не превосходит , поэтому часть, отвечающая за сумму, состоит не более чем из двух цифр. Разбираем варианты разреза:
- «3» и «3621», «33» и «621» — не годятся: первое число меньше второго, порядок невозрастания нарушен;
- «3362» и «1» — тогда одно из чисел равно 1. Сумма цифр трёхзначного числа равна 1 только у числа 100, но произведение его цифр равно 0, а не 3362. Произведение цифр равно 1 только у числа 111, но сумма его цифр равна 3, а не 3362. Не подходит;
- «336» и «21» — подходит: , а суммой цифр число 336 быть не может, поэтому и .
Ищем цифры , для которых и . Разложим на множители: . Множитель 7 не может «разойтись» между цифрами, поэтому одна из цифр равна 7, а две другие дают в произведении . Единственное разложение числа 48 на два множителя-цифры — это . Проверяем сумму: — верно.
Значит, цифры искомого числа — 6, 7 и 8; наибольшее число из этих цифр — 876. Проверка программой:
for n in range(999, 99, -1):
a, b, c = int(str(n)[0]), int(str(n)[1]), int(str(n)[2])
p, s = a * b * c, a + b + c
x, y = max(p, s), min(p, s)
if str(x) + str(y) == '33621':
print(n)
break
Программа печатает 876.
Ответ: 876