Найти варианты суммы чисел дающих определенное значение
Вопрос больше по части математики и его реализация на Python. Подскажите как можно найти все возможные варианты нахождения суммы цифр для числа например 13. Т.е. мы знаем что 13 это 10+3 или 9 + 4 и так далее.
У меня есть определенный массив чисел например 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 Есть переменная a = 13. Для нее нужно найти все возможные варианты получения этого числа путем сложения.
Если есть источники литературы, и ссылки на готовые источники кода может в git Hube, был бы признателен.
Спасибо.
Ответы (3 шт):
Если только и правда перебирать все варианты. Помочь может модуль itertools
import itertools as it
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = 13
comb = it.permutations(a, 2) # it.combinations если не хотите учитывать обратные перестановки
result = [i for i in comb if sum(i) == b]
print(result)
результат:
[(3, 10), (4, 9), (5, 8), (6, 7), (7, 6), (8, 5), (9, 4), (10, 3)]
Вот есть еще такой вариант:
def summs(answer, *dig):
res = []
for i in dig:
for j in dig:
if i + j == answer and (i, j) not in res and (j, i) not in res:
res.append((i, j))
return res
print(summs(13, *range(10)))
[(0, 13), (1, 12), (2, 11), (3, 10), (4, 9), (5, 8), (6, 7)]
Как то так, это по поводу " Чтобы использовалось не только два значения"
import itertools
def summs(answer, *dig):
res = []
for i in range(1, answer + 1):
for j in itertools.combinations_with_replacement(list(dig), i):
if sum(list(j)) == answer:
res.append(j)
return res
print(summs(13, *range(1, 11)))
Результат:
[(3, 10), (4, 9), (5, 8), (6, 7), (1, 2, 10), (1, 3, 9), (1, 4, 8), (1, 5, 7), (1, 6, 6), (2, 2, 9), (2, 3, 8), (2, 4, 7)... и тд