Условие: № 5438 (А. Сардарян)
На вход алгоритма подаётся два натуральных числа N и M. Алгоритм строит по ним новое число R следующим образом:
- Вычисляется произведение P1 всех ненулевых чётных цифр чисел N и M.
- Вычисляется произведение P2 всех нечётных цифр чисел N и M.
- Результат R вычисляется как модуль разности P1 и P2.
Например, для N = 256 и M = 108 получаем P1 = 2·6·8 = 96 и P2 = 5·1 = 5, так что R = |96 - 5|= 91. Укажите минимальное число M, при котором для N = 120 получается R = 29.
def F(A):
temp = 1
for x in A:
temp *= x
return temp
for m in range(1, 1000):
n = 120
P = [int(i) for i in str(n)] + [int(i) for i in str(m)]
P1 = [i for i in P if i != 0 and i % 2 == 0]
P2 = [i for i in P if i % 2 != 0]
p1, p2 = F(P1), F(P2)
r = abs(p1 - p2)
if r == 29:
print(m)
break
Комментарий к решению задачи:
- def F(A): - Определяем функцию F с параметром A.
- temp = 1 - Инициализируем переменную temp со значением 1.
- for x in A: - Создаём цикл по элементам A с помощью переменной x.
- temp *= x - Умножаем текущее значение temp на x и присваиваем результат temp.
- return temp - Возвращаем значение переменной temp.
- for m in range(1, 1000): - Создаём цикл по диапазону от 1 до 999 с помощью переменной m.
- n = 120 - Присваиваем переменной n значение 120.
- P = [int(i) for i in str(n)] + [int(i) for i in str(m)] - Создаем список P, который содержит целочисленные значения цифр из строки n и m.
- P1 = [i for i in P if i != 0 and i % 2 == 0] - Создаем список P1, который содержит только не нулевые четные числа из списка P.
- P2 = [i for i in P if i % 2 != 0] - Создаем список P2, который содержит только нечетные числа из списка P.
- p1, p2 = F(P1), F(P2) - Вызываем функцию F с аргументом P1 и присваиваем результаты переменным p1 и p2.
- r = abs(p1 - p2) - Присваиваем переменной r абсолютное значение разности между p1 и p2.
- if r == 29: - Проверяем, если r равно 29.
- print(m) - Выводим значение переменной m.
- break - Прерываем цикл.