【问题】 组合问题
问题描述:找出从自然数1、2、... 、n中任取r个数的所有组合。例如n=5,r=3的所有组合为:
1,2,3
1,2,4
1,3,4
2,3,4
1,2,5
1,3,5
2,3,5
1,4,5
2,4,5
3,4,5
用程序实现有几种方法:
1)穷举法
程序如下
【程序】
#include
const int n=5,r=3;
int i,j,k,counts=0;
int main()
{
for(i=1;i<=r ;i++)
for(j=i+1;j<=r+1;j++)
for( k=j+1;k<=r+2;k++){
counts++;
printf("%4d%4d%4d/n",i,j,k);
}
printf("%d",counts);
return 0;
}
但是这个程序都有一个问题,当r变化时,循环重数改变,这就影响了这一问题的解,即没有一般性。
2)递归法分析所列的10个组合,可以采用这样的递归思想来考虑求组合函数的算法。
设函数为void comb(int m,int k)为找出从自然数1、2、... 、m中任取k个数的