组合数
时间限制: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>
int n,r,b[100];
void dfs(int m,int sum)
{
if(m<=0) return;//m=0时代表函数执行结束,返回到m=5;然后从b[5]=0继续执行
if(sum==r)
{
for(int i=n; i>=1; i--)
if(b[i])
printf("%d",i);
printf("\n");
return;
}
b[m-1]=1;
dfs(m-1,sum+1);
b[m-1]=0;
dfs(m-1,sum);
return;
}
int main()
{
while(~scanf("%d%d",&n,&r))
{
dfs(n+1,0);
}
return 0;
}