组合数
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
- 输入
- 输入n、r。
- 输出
- 按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。 - 样例输入
-
5 3
- 样例输出
-
543 542 541 532 531 521 432 431 421 321
- 来源
- [苗栋栋]原创
-
上传者
#include<stdio.h> #include<string.h> int n,r,deep; bool visit[11]; int a[11]; void DFS(int n,int deep,int r)//入口,当前层数, 总层数 { if(deep>r)return; for(int i=n;i>=1;i--){ if(!visit[i]){<span style="font-family: Tahoma, Arial, sans-serif, simsun;">//判断点是否访问过</span> visit[i]=true; a[deep]=i; if(deep==r){ for(int i=1;i<=r;i++) printf("%d",a[i]); printf("\n"); } DFS(i-1,deep+1,r); visit[i]=false; } } } int main() { void DFS(int n,int deep,int r); while(~scanf("%d%d",&n,&r)){ memset(visit,false,sizeof(visit)); DFS(n,1,r); } return 0; }