查找不同数字组合的数量,使其总数等于总和

时间:2012-02-20 17:45:24

标签: c algorithm

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

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

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

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

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

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

2 个答案:

答案 0 :(得分:5)

您可以将此视为在n个可辨别的罐子中放置难以区分的硬币的方法的数量。 (在示例中,s = 4且n = 3)。

here所述,即C(n + s-1,s-1),在示例中给出15。

答案 1 :(得分:3)

如果顺序无关紧要且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个切片。