题目:有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;
}