我要如何从所有可能的将4个无法区分的球排列在3个不同桶中的组合中获取第N个排列。如果
Bl = 球的数量
和 Bk
= 桶的数量
,例如对于Bl = 4,Bk = 3,则可能的排列为:
004
,013
,022
,031
,040
,103
,112
,121
,130
,202
,211
,220
,301
,310
,400
。
第一个排列(N=0)是004
(即 桶1 = 0个球 , 桶2 = 0个球 , 桶3 = 4个球 ),最后一个(N=14)是400
。所以,假设我有103
,则 N 将等于 5 。我希望能够这样做
int Bl=4,Bk=3;
getN(004,Bl,Bk);// which should be = 0
getNthTerm(8,Bl,Bk);// which should be = 130
P.S: 序列中的最大项数为(Bl+Bk-1)C(Bk-1),其中C是组合运算符。 获取自
stars and bars
注:本段内容涉及组合数学知识。
n
个。 - Joseph Wood