有人向我公司欠了16张不同的发票,总金额为29048,88美元。他们在1999年的2个不同的转移1中给我这笔金额3,9554,96 $
如何找到第一次和第二次转帐中支付的发票?如果你有一个想法只用一个简单的数学方程式解决这个问题或使用javascript(循环可能)谢谢
可能重复的this question?
我认为this answer解决了你的问题。
我在这里复制了解决方案的python实现。但最初的答案提供了更多的选择。算法的复杂性增长得非常快(指数),所以在使用它之前要小心,因为它比N = 16更大。
只需在列表中输入您的所有发票,然后将其中一个付款作为第二个参数输入。您将获得给定付款的所有发票组合,而其他付款只是列表中缺少的元素。可能有多个解决方案。
def subset_sum(numbers, target, partial=[]):
s = sum(partial)
# check if the partial sum is equals to target
if s == target:
print("sum(%s)=%s" % (partial, target))
if s >= target:
return # if we reach the number why bother to continue
for i in range(len(numbers)):
n = numbers[i]
remaining = numbers[i+1:]
subset_sum(remaining, target, partial + [n])
subset_sum([31,19,80,48,52,70,10,13,12,54,23,45,34,26,51,23,100],193)