2019CVTE技术支持软件编程2

时间:2021-08-24 16:26:20

题目:有8位数密码,加密规则如下:第一步取最后一位数;第二部将倒数第二位数放到最前形成一个新数,再取新数最后一位,以此循环取完所有数为止;如98698426,密码为64982689,时间复杂度为O(N)。

思路:在输入字符串之间扩展固定长度内存,以便存储移动过来的数据。由规律得出:该固定长度为strlen(string)-1。其余按照题目操作编程即可。

/*注意作者未考虑时间复杂度,另外改程序适用于51个长度内的字符串操作(51 + (51-2) = 100),不局限于8个。*/

#include <stdio.h>

#include <string.h>

#include <malloc.h>

char str[101];

int  main()

{

int   i, j, len;

scanf("%s", str);

len = strlen(str);

memmove(str + (strlen(str)-2), str, strlen(str));

for (j = len-3, i = strlen(str)-1; j > -1; i--, j--)

{

printf("%c", str[i--]); //打印当前字符

str[j] = str[i]; //将下一个位置字符移动到字符串首位

}

printf("%c%c\n", str[i], str[j+1]);

return 0;

}