组合数(dfs)

来源:互联网 发布:js生成随机数 编辑:程序博客网 时间:2024/06/05 14:46

组合数


题目描述

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

输入

输入n、r。

输出

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

样例输入

复制
5 3

样例输出

复制
543542541532531521432431421321
#include <cstdio>#include <cstdlib>#define max() a>b?a:busing namespace std;int a[10000],n,m,ans;void dfs(int n,int x){    int i;/*注意此i必须要在里面声明因为在每次递归是会把i的只改变(我觉得是这样)*/    if(x==m) {        for(i = 0;i<x;i++)            printf("%d",a[i]);        printf("\n");    }    printf( "%d\n",i+1);    for (i =n-1;i>0;i--) {        if(i-m+x<0) break;        a[x]=i;        dfs(i,x+1);    }}int main(){    while(~scanf("%d%d",&n,&m)) {        dfs(n+1,0);        return 0;    }}


原创粉丝点击