NSOJ 组合数

来源:互联网 发布:移动4g网络培训 编辑:程序博客网 时间:2024/06/05 07:56



组合数

时间限制: 3000ms
内存限制: 128000KB
64位整型:      Java 类名:
上一题 
 提交  运行结果  统计  讨论版
 下一题
类型: 
没有
     

    题目描述

    找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。

    输入

    输入n、r。

    输出

    按特定顺序输出所有组合。
    特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。

    样例输入

    5 3

    样例输出

    543542541532531521432431421321

    来源

    NYOJ

    分类 

    思路:一个简单深搜题;


    #include<stdio.h>#include<string.h>int n,a[11],book[11],m; void dfs(int step,int term)   //step表示有几个数,term表示当前值 {if(step==m){for(int i=0;i<m;i++)printf("%d",a[i]);printf("\n");return ;}for(int i=n;i>=1;i--){if(!book[i]&&i<=term)    //i没有被标记,且小于term的值时,才符合题意 {book[i]=1;a[step]=i;dfs(step+1,i);book[i]=0;}}return ;}int main(){while(~scanf("%d %d",&n,&m)){memset(book,0,sizeof(book));dfs(0,n);}return 0;}


    原创粉丝点击