NYOJ-32-组合数

来源:互联网 发布:文件夹自动拷贝软件 编辑:程序博客网 时间:2024/06/18 14:51
时间限制:3000 ms  |  内存限制:65535 KB
难度:3
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
输入
输入n、r。
输出
按特定顺序输出所有组合。
特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543542541532531521432431421321
刚开始写的时候我想成让它们一个一个的输出,就用到了数组,后来发现不行,我不会写了,又想到他这个跟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;
}

0 0