【问题标题】:Finding the number of different combinations of numbers such that its total equals to sum找到数字的不同组合的数量,使其总和等于总和
【发布时间】:2012-03-11 01:41:50
【问题描述】:

我想找出非负数的不同组合的数量(可以是任何数字,它不是固定的),使其总数等于提供的总和。

例如:我有 3 个数字,我想找到不同的数字组合,使得总和为 4。num 的值从 0 开始。没有负数。

对于 3 个和为 4 的数字,组合是

2 0 2
2 2 0
0 2 2
0 1 3
3 1 0
0 3 1 
1 0 3
1 3 0
3 0 1
0 0 4
4 0 0
0 4 0
2 1 1
1 2 1
1 1 2

我看到了这个例子:Finding the total number combinations for an integer using three numbers

但问题是它只使用三个数字。

任何算法或代码都会有用。谢谢。

【问题讨论】:

  • 任何自己尝试这样做并让我们知道的尝试都会非常有用。
  • 无限? 0+0+4, 1+1+2, 5+(-1)+0, 100+(-100)+4....
  • 在任何人考虑帮助您之前,您需要证明您已尝试自己解决此问题。
  • 答案仍然是无限的。您可以将无数个零添加到总和为目标数的任何其他组合。因此,您最好的选择可能是在内存耗尽时终止的递归解决方案。
  • @lakesh:你对 (2, 1, 1)、(1, 1, 2) 和 (1, 2, 1) 有什么看法?为什么它们无效?

标签: c algorithm


【解决方案1】:

您可以将其视为将 s 不可区分的硬币放入 n 个可区分的罐子中的方法数。 (在示例中,s=4 和 n=3)。

正如here 解释的那样,即 C(n+s-1,s-1),在示例中给出 15。

【讨论】:

    【解决方案2】:

    如果顺序无关紧要并且 0 也很重要,例如示例链接,那么

    n=total+1
    k=number-1
    binomial(k+n-1,k)  #combinations whith reptetitions
    or
    binomial(number+total-1,number-1)
    

    如果你将数字 5 表示为

     1+1+1+1+1
    

    并且必须找到 3 个整数的总和数
    您可以看到您必须在 6 个计算组合中进行 2 个切片重复。

    【讨论】:

    • 例如,我有 3 个数字,总共有 4 个,我可以有 12 种不同的方法来获得不同的数字。但是使用你的方法,我在替换数字后得到 12.5...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 2015-12-10
    • 1970-01-01
    相关资源
    最近更新 更多