目標柏林

題目描述

1945年初,蘇軍和英美聯軍已從東西兩面攻入德國國境。 4月初,在蘇軍和英美聯軍的夾擊下,德軍只能龜縮在以柏林爲中心的德國東部的狹長地帶,成了甕中之鱉。 但希特勒困獸猶鬥,一方面發出摧毀一切設施,實行“焦土”政策的指令; 另一方面下令把德國分爲南北兩個行政區,各自作戰,他自己則固守柏林。 在這一天,蘇軍結果一份傳自柏林的加密電文。經初步破譯,顯示希特勒要調集100萬兵力, 在柏林周圍築起了三層防衛圈,並集中3300架飛機,1500多輛坦克,1萬門火炮和迫擊炮,準備死守柏林。 形勢很危機,我們需要馬上破譯所有密碼。請你來遍個程序幫忙破譯。
蘇軍知道德軍用的加密方法是這樣的: 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。
現在給你加密後的文章,讓你還原成原來的文章。

輸入要求

輸入一篇加密後的文章,每行爲一段。每段不超過1000個字符。 輸入以文件結束(EOF)爲止。

輸出要求

輸出解密後的文章。 每段一行。

假如輸入

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;
	}
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章