#include<stdio.h>
int make_sign[10];//标记数组,如:make_sign[1]=0表示 1这个数字没有走过
int number[10];//用来存 数字 number[3]=1;表示输出的第三个数是1
int n,r;//n:一共有几个数,相当于每次走有几个路径可以选择
void combination(int layer)//layer:当前层数
{
int i;
if(layer > r)
{
for( i = 1; i <= r; i ++)//输出数字
{
printf("%d",number[i]);
}
printf("\n");
}
else
{
for(i = n; i > 0; i --)
{
if(make_sign[i] == 0 && number[layer -1] > i)
{
make_sign[i] = 1;
number[layer] = i;
combination(layer+1);
make_sign[i] = 0;
}
}
}
}
int main ()
{
number[0] = 1000;
scanf("%d%d",&n,&r);
combination(1);
return 0;
}
组合数(优化)输出数字由大到小输出
最新推荐文章于 2020-11-21 01:55:15 发布