讨论 / 递归思想处理解决题目
360736293 2018-05-07 18:13:46
点我顶贴 收藏 删除
下列供参考

/*

b c d e f g h i j

b d f i j

b d g h i

*/

所谓递归思想,就是为了求某一个值而必须知道他前一个数的值,要想知道前一个数的值就必须得知道前前一个数的值,

那么,我们就可以想到思路了,我们先观察所给的5个字母,我们发现i与j已经到达了最后的位置,那么如何确定下一次处理

后它们的位置呢?就得找到“谁”后面出现了空位,比如上面的f,f后面到i有g和h两个字母,意思就是它那里有空位,那么下一次运算时f往后移一位,顺带着就知道了i,j该移到哪里了,就是移位后的g加一,加二,依次类推,不过得先让最右边的数移到最后。

----------------------------------------------------------------------------------------------------------

#include <stdio.h>

int main()

{

int s, t, w;//s为最小位置,t最大位置,w为数字位数

int i, j, k;

char a[21];

scanf("%d %d %d", &s, &t, &w);

scanf("%s", a);

for (i = 0; i < 5; i++) //只需用循环输出5次

{

for (j = w-1; j >=0; j--) //bdfij,从右往左遍历处理

{

if (a[j]+1 <= ('a'+(t-(w-j)))) //如果最后一位字符小于或等于规定范围内的它的前一位的字符大一位后

{

a[j] += 1;//前一个字符变大一个,等待下一次遍历开始

for (k = j+1; k < w; k++)

{

a[k] = a[j] + (k-j);//相当于把前一位字符往后拉了一位,如bdfij拉成bdghi

}

printf("%s\n", a);//输出处理过后的字符串

break;//终止内循环

}

else//否则进行下一次循环

{

}

}

}

查看更多回复
提交回复