求N个数中选取m个数的组合的问题(m<=N)

8706阅读 0评论2012-03-06 liujunwei1234
分类:C/C++

 题目: 编写程序,从N个数中选取m个数,打印输出这m个数的所有组合形式。

example: N=5, m=3, array[N] = {1,2,3,4,5},则应该打印输出:

1,2,3
1,2,4
1,2,5 
1,3,4
1,3,5
1,4,5

2,3,4
2,3,5
2,4,5

3,4,5

最容易理解的解法:递归枚举
/*n个数中选取m个数的组合*/
void zuhe(int n, int m)
{
    int i;
    
    for(i = n; i >=m; i--)
    {
        re[m] = i; /*m个数组合的最后一个数可以选择m ... n之间的任意一个*/
        if(m > 1) zuhe(i-1, m-1) /*从i-1个数中选取m-1个数的组合*/
        else
        {
            for(k = 0; k < m; k++)
                printf("%d ",re[k]);
         } 
    }
}


上一篇:linux内核阅读总结
下一篇:c实现的扫描线算法