| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1331 人关注过本帖
标题:新手求教:从 M 个数中取 N 个数,输出所有组合
只看楼主 加入收藏
zhiyanzhai33
Rank: 2
等 级:论坛游民
帖 子:50
专家分:15
注 册:2009-7-30
结帖率:66.67%
收藏
已结贴  问题点数:20 回复次数:4 
新手求教:从 M 个数中取 N 个数,输出所有组合
要求:由用户输入 M 和 N 的值,然后输出所有组合(不重复)。比如输入 M=5,N=3,则输出:
123    124    125    134    135    145    234    235    245    345
想了两天,越想越乱,请大家给我讲一下解这个题的算法,谢谢!
搜索更多相关主题的帖子: 输出 
2010-05-13 20:13
hahayezhe
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:湖南张家界
等 级:贵宾
威 望:24
帖 子:1386
专家分:6999
注 册:2010-3-8
收藏
得分:5 
5*4*3 3重循环 穷举

关于更好的方法 你可以去百度搜下 全排列算法
2010-05-13 20:54
NOMIPS
Rank: 7Rank: 7Rank: 7
等 级:黑侠
帖 子:86
专家分:537
注 册:2010-3-31
收藏
得分:0 
就拿个简单的 M=5 N=3,
N越大循环的重数越多,估计吃不消。
#include <stdio.h>
int main(int argc, char *argv[])
{
    int a,b,c;
    for(a=1;a<=5;a++)
           for(b=a+1;b<=5;b++)
                   for(c=b+1;c<=5;c++)
                                     {
                                     printf("%d %d %d\n",a,b,c);
                                     }

    return 0;
}
2010-05-13 21:18
xichong
Rank: 7Rank: 7Rank: 7
来 自:四川南充
等 级:黑侠
威 望:2
帖 子:146
专家分:582
注 册:2009-6-10
收藏
得分:15 
#include <stdio.h>
#define N 100
int a[N],end;
void zuhe(int m,int k)//从m个元素中取出k个元素的组合
{
    int i,j;
    for(i=m;i>=k;i--)
    {
        a[k]=i;//最后一个位置的元素可以取m,m-1,m-2.....k
        if(k>1) zuhe(i-1,k-1);//递归调用
        else
        {
            for(j=1;j<=end;j++)
                printf("%d ",a[j]);
            printf("\n");
        }
    }
}
void main()
{
    int n,m;
    printf("请输入Cn,m中n与m的值:");
    scanf("%d%d",&n,&m);
    if(n>100)
        printf("数字太大了!");
    end=m;
    zuhe(n,m);   
}
可以参考这个算法得到你要的结果!
2010-05-14 13:07
zhiyanzhai33
Rank: 2
等 级:论坛游民
帖 子:50
专家分:15
注 册:2009-7-30
收藏
得分:0 
谢谢大家,四楼是正解,二楼介绍了参考资料,赠送5分
2010-05-14 19:28
快速回复:新手求教:从 M 个数中取 N 个数,输出所有组合
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.015333 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved