您的位置:首页 > 编程语言

求组合数算法思想及代码

2016-03-19 16:34 330 查看
求组合数,从n个数中拿出m个数,并列出其组合方式:

思想:

利用递归,一个一个的取出来:

例: void combine(int a[],int n,int m,const int M)

对 1 2 3 4 5 从这5个数中取出3个

从后往前,先取出一个数

1 2 3 4 5

从加粗的数字中取出一个相应的数 1 2 3 4 5

假设取5,把它存在一个数组b[]中 b[]:5

然后继续 1
2 3 4 5

假设取 4 1 2 3
4 5 b[]:5 4

然后再取

假设取3 取完三个输出 b[]:5 4 3

然后进行递归,直到完全输出!

来看代码:

int combine(int a[],int n,int m,int c[],const int M) //从n个数中取出m个数,a[]为其原数
{                                                    //c[] 用来储存,方便输出,M为静态变量,其值不变
for(int i=n;i>=m;i--)
{
c[m]=i;
if(m>1)
combine(a,i-1,m-1,c,M);
else//输出
{
for(int j=1;j<=M;j++)
printf("%d",b[j]);
}
}
}


注意for循环,
注意m:m代表for循环的最小值,因为如果小于m其去取的数肯定不够,可以把该函数在n个数中选择m-1个数,直到m==1
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: