编写思想
朋友向我请教了个题。如题目,花了一点时间把他编写成功了。下面我来说说我是怎么实现的。
思想:从高到低依次输出,也就是说若输入的数字是361,那么输出的数字为631。平常排列数的时候一般用冒泡法啊什么的,但是都必须知道数的大小;而这里只有一个整数,那么我们可以把他先拆分为单一的数字,直到拆分到最后2个数字时候,就开始排序如输入数字为:3654。先从个位一个一个拆分,按顺序拆分出来的结果就是4、5、6、3。最后一次拆出来的数字分别是6和3,先排序。排序出来结果时候63。接着返回上一层,怎么样把5加入到63呢。分3种情况;第一种就是比6大,应该放在最前面;第二种就是比3小,放在最后面;最后一种情况就是放在中间。那么问题来了。怎么知道这个数字是放在那里的;我们在把63拆分,从最小的拆分起。依次比较。最后根据情况来把5放进去。
接下来是代码展示。代码已经经过测试。
测试程序
代码写的不是很规范…
int rank_num(int num)
{
int a=num/10;
int b=num%10;
int c;
int d=1;
if(a>10)
{
c=a=rank_num(a);
for(;;)
{
if(b>(a%10)&&a!=0)
{
a=a/10;
}
else
{
if(a==0)
{
return (b*d)+c;
}
else if(a==c)
{
return (c*d*10)+b;
}
else
{
return (a*d*10)+(b*d)+(c%d);
}
}
d=d*10;
}
}
else
{
return a>b?(num):(b*10)+a;
}
}