您的位置:首页 > 其它

NYOJ-32-组合数

2017-04-14 10:09 260 查看
时间限制: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
刚开始写的时候我想成让它们一个一个的输出,就用到了数组,后来发现不行,我不会写了,又想到他这个跟POJ上面那个放苹果的题有点相似,后来又听我们学长讲找到一组答案后可以一下子输出,不要让他们一个一个的输出。
#include <stdio.h>
void fun(int m,int n,int ans)
{
if(n==0)
{
printf("%d\n",ans);//找到答案后就一下子输出
return;
}
for(int i=m;i>=n;i--)
{
fun(i-1,n-1,ans*10+i);//学长教的小小的套路,嘿嘿
}
}
int main(int agrc,const char *argv[])
{
int m,n;
scanf("%d%d",&m,&n);
fun(m,n,0);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: