題目描述
蘇軍知道德軍用的加密方法是這樣的: 1.獲得一段文字後,求出它的長度(包括空格)len。 2.進入加密運算的第1步:把所有下標是1倍數的字符做順時針旋轉。 3.進入加密運算的第2步:把所有下標是2倍數的字符做逆時針旋轉。 4.進入加密運算的第3步:把所有下標是3倍數的字符做順時針旋轉。 5.按上面的規則,第奇數步按順時針旋轉,偶數步按逆時針旋轉,一直到第len步爲止。
比如原文是:abcde 1.獲得長度len = 5 2.1的倍數有1、2、3、4、5,所以把這5個字符按順時針旋轉,得到eabcd。 3.2的倍數有2、4,所以把這2個字符按逆時針旋轉,得到ecbad。 4.3的倍數有3,所以把這1個字符按順時針旋轉,得到ecbad。 5.4的倍數有4,所以把這1個字符按逆時針旋轉,得到ecbad。 6.5的倍數有5,所以把這1個字符按順時針旋轉,得到ecbad。 最後的結果是ecbad。
現在給你加密後的文章,讓你還原成原來的文章。
輸入要求
輸出要求
假如輸入
ecbad
應當輸出
abcde
提示
C and C++ language can use : char input[1001]; while(gets(input)) { ... }
#include<iostream>
#include<algorithm>
#include <vector>
#include<string.h>
#include<ctype.h>
using namespace std;
void fun();
int main()
{
fun();
return 0;
}
void fun()
{
char str[1001],str0,str1;
int arr[1001];
int i;
while(gets(str))
{
for(i=strlen(str)/2;i>1;i--)//只需算一半即可,1的也不用算
{
int temp=1;
if(i%2==1)//逆序,也就是數組前移
{
str0=str[i-1];
while(i*(temp+1)<=strlen(str))
{
str[i*temp-1]=str[i*(temp+1)-1];
temp++;
}
str[i*temp-1]=str0;
}
else//順序,數組後移
{
str0=str[i-1];
while(i*(temp+1)<=strlen(str))
{
str1=str[i*(temp+1)-1];
str[i*(temp+1)-1]=str0;
str0=str1;
temp++;
}
str[i-1]=str1;
}
}
for(i=1;i<strlen(str);i++)
cout<<str[i];
cout<<str[0]<<endl;
}
}