Найти в двух списках числа, сумма которых равна заданному числу
заданное число (например 11), и есть списки чисел например [1, 2, 3, 5] и
[6, 1, 3] необходимо найти числа сумма которых равна заданному числу. пробовал реализовать на Python , но безуспешно
# ввод
r30, r10, r20 = (int(num) for num in input().split())
# все возможные числа для перемножения
numbers = []
r30_1 = r30
while r30_1 >= 0:
numbers.append(r30_1)
r30_1 -= 1
numbers.reverse()
numbers = numbers[:numbers.index(r30) + 1]
print(numbers)
res_list1 = [r10 * x for x in numbers if isinstance(x, int)]
res_list2 = [r20 * y for y in numbers if isinstance(y, int)]
# оставить только числа до конечных
res_list1 = res_list1[:res_list1.index(r30) + 1]
res_list2 = res_list2[:res_list2.index(r30) + 1]
result = []
result1 = []
res_list_result = [a + b for a, b in zip(res_list1, res_list2)]
for i in res_list_result:
if i == r30:
result.append(i)
print(res_list1)
print(res_list2)
print(result)
это попытка решения 1 задачи с acm.timus ,но проблема в том что в конце выходит [] ,из за того что это обычная сумма по 2 числа из разных списков , подскажите как организовать алгоритм перебора слагаемых
формат вывода
0 12
5 9
10 6
15 3
20 0
Ответы (3 шт):
Автор решения: Serg Bocharov
→ Ссылка
Самый простой вариант:
condition = int(input())
list_a = [1, 2, 3, 5]
list_b = [6, 1, 3]
for a in list_a:
for b in list_b:
if (a + b) == condition:
print(a, b)
Автор решения: Владислав Харламов
→ Ссылка
from itertools import product # Декартово произведение iterable объектов
condition_number = int(input()) # Число для которого сумма пары дает его.
list_a, list_b = [1, 2, 3, 5], [6, 1, 3] # Списки которые перебираем
answer = [f'{x} {y}' for x,y in product(list_a, list_b) if x + y == condition_number]
# Перебираем все пары из list_a, list_b, оставляем только те,
# которые дают в сумме наперед заданному числу, оставляем их в списке в виде строки 'x y'
# пользуясь f-строками.
print(*answer, sep='\n')
# Печатаем все элементы, по умолчанию через пробел,
# но мы задали sep='\n', заменив пробел переводом строки
Автор решения: Эникейщик
→ Ссылка
Самый простой вариант не является самым оптимальным. Что если во втором списке миллион чисел? Все перебирать? Лучше использовать сет и такой вариант:
s = int(input())
list_a = [1, 2, 3, 5]
list_b = [6, 1, 3]
list_b = set(list_b)
for a in list_a:
if s-a in list_b:
print(a, s-a)
break # опционально. Если достаточно найти только одну пару