Задание №5 — Анализ простейших алгоритмов
Автомат получает на вход трёхзначное число. По этому числу строится новое число по следующим правилам.
1) Вычисляются суммы квадратов первой и второй, а также второй и третьей цифр исходного числа.
2) Полученные два числа записываются друг за другом в порядке невозрастания (без разделителей).
Пример. Исходное число: 621. Суммы квадратов цифр: Результат: 405.
Укажите наибольшее число, при обработке которого автомат выдаст число 7434.
Правильный ответ
753
Пояснение
Решение:
Автомат выводит две суммы квадратов цифр, записанные подряд в порядке невозрастания. Каждая такая сумма имеет вид , где и — цифры, поэтому она не превосходит , то есть содержит не больше трёх цифр.
Значит, число 7434 нужно разбить на два куска и , причём и оба не больше 162. Разбиение 7 и 434 не подходит: . Разбиение 743 и 4 не подходит: . Остаётся единственный вариант: , .
Пусть исходное число — . Тогда и .
Квадраты цифр — это 0, 1, 4, 9, 16, 25, 36, 49, 64, 81. Перебирая пары, получаем:
- 74 представляется единственным способом: , то есть цифрами 5 и 7;
- 34 представляется единственным способом: , то есть цифрами 3 и 5.
Цифра входит в обе пары, поэтому . Отсюда и : число определяется однозначно.
def f(n):
d = [int(c) for c in str(n)]
a = d[0] ** 2 + d[1] ** 2
b = d[1] ** 2 + d[2] ** 2
return int(str(max(a, b)) + str(min(a, b)))
print(max(n for n in range(100, 1000) if f(n) == 7434))
Ответ: 753