Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3360794
  • 博文数量: 258
  • 博客积分: 9440
  • 博客等级: 少将
  • 技术积分: 6998
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-03 10:28
个人简介

-- linux爱好者,业余时间热衷于分析linux内核源码 -- 目前主要研究云计算和虚拟化相关的技术,主要包括libvirt/qemu,openstack,opennebula架构和源码分析。 -- 第五届云计算大会演讲嘉宾 微博:@Marshal-Liu

文章分类

全部博文(258)

文章存档

2016年(1)

2015年(4)

2014年(16)

2013年(22)

2012年(41)

2011年(59)

2010年(40)

2009年(75)

分类: C/C++

2012-03-06 20:30:30

 题目: 编写程序,从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]);
         } 
    }
}


阅读(8607) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~