【问题标题】:how to find a sum among grand total如何在总计中求和
【发布时间】:2019-04-10 18:42:53
【问题描述】:

有人欠我公司 16 张不同的发票,总金额为 29048,88 美元。 他们通过 2 次不同的转账向我支付了这笔款项 1 的 19993,92 $ 2 of 9054,96 $

如何找到在第一次和第二次转账中支付的发票? 如果您有一个想法来解决这个问题,只需使用一个简单的数学方程式或 javascript(可能是循环) 谢谢

【问题讨论】:

  • 唯一的可能是您知道大多数(所有)发票的价格。从数学上讲,你的方程比未知数少,这意味着你的问题有无数个答案。让i_k 成为第 k 张发票。你的问题可以表述如下:i_0 + i_1 + i_2 + .... + i_15 = 29 048.88。那是 16 个未知数 1 个方程。
  • 其实我知道每16张发票的金额。
  • 谁有想法,有帮助吗?

标签: math logic


【解决方案1】:

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)

【讨论】:

    猜你喜欢
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 2022-10-13
    • 2016-05-10
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    • 1970-01-01
    相关资源
    最近更新 更多