您的位置:首页 > 其它

组合数(优化)输出数字由大到小输出

2013-10-30 14:28 274 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: