时间限制:3000 ms | 内存限制:65535 KB
难度:3
输入
输入n、r。
输出
按特定顺序输出所有组合。 特定顺序:每一个组合中的值从大到小排列,组合之间按逆字典序排列。
样例输入
5 3
样例输出
543
542
541
532
531
521
432
431
421
321
描述
找出从自然数1、2、... 、n(0<n<10)中任取r(0<r<=n)个数的所有组合。
刚开始写的时候我想成让它们一个一个的输出,就用到了数组,后来发现不行,我不会写了,又想到他这个跟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--) { //i从大到小保证答案是逆序输出
fun(i-1,n-1,ans*10+i);//ans保证答案正确
}
}
int main(int agrc,const char *argv[])
{
int m,n;
scanf("%d%d",&m,&n);
fun(m,n,0); //当前数字是m 还需填n个数字 当前答案是0
return 0;
}
转载请注明原文地址: https://ju.6miu.com/read-672647.html