1. 程式人生 > >OpenJudge百鍊習題解答(C++ )--題4112:情報破譯-Cryptanalysis

OpenJudge百鍊習題解答(C++ )--題4112:情報破譯-Cryptanalysis

題:

總時間限制:1000ms     記憶體限制:65536kB
描述

A國和B國正在進行一場戰爭。A國通過間諜知道B國的情報加密規則為:

1.    僅對字母加密,其他符號保留(如空格,逗號等)

2.    對第i個單詞(i從1開始)的加密方法是把第i個單詞反轉(如abc變成cba),然後對單詞內的每個字母採用經典的Caesar加密法,迴圈後移i個字母。例如:第5個單詞的加密表如下所示:

密碼字母:A B C D E F G H I J K L M N O P Q R S T U VW X Y Z

原文字母:V W X Y Z A B C D E F G H I J K L M N O P QR S T U

3.       單詞的定義是:任何一串極大的連續字母串。

比如,樣例輸出第三行,第二個單詞為ba,反轉後為ab,a後移2個單詞變成c,b後移兩個單詞變成d,故該單詞加密後為cd(見樣例輸入第三行)。

現在A國又截獲了一些B國的情報密文。請你幫A國破譯出情報的內容。

輸入
一共有不超過int範圍行,每行為一個字串(int範圍)。注意,每行是可以以空格開頭的。
輸出
情報破譯後得到的內容。每條情報對應輸出一行。
樣例輸入:
樣例輸出:
               

解:

#include<iostream>
#include<stdio.h>

#include<string>

using namespace std;
void Tra(string A);
char Cc(int n,char c);
int main()
{
	int Line=0;
	int count=0;
	int Len;



	string A[65536];
/*	while(true)
	{
		count++;
		Len=0;
getline(cin,A[count-1]);

	
		
	while(A[count-1][Len++]);
	if(A[count-1][Len-2]!='.')
	{
	
		break;
	}	
	
	}
	
	for(int i=0;i<count;i++)
	{
	Tra(A[i]);
	}
	
	*/
	for(int i=0;i<65536;i++)
	{
		count=i;
	getline(cin,A[count]);	
	Tra(A[count]);
		
	}
	


	return 0;
 } 
 
 
 
 
 
 
 
 
 
 
 
 
 void Tra(string A)
 {
 	
 	
 	
 	int F=-1;
 	int L=-1;
 	int InWord=0;
 
 	char Temp;
 	int Count=0;
 	int i=0;
 	while(A[i])
 	{
	
 		if(InWord==0&&   (  ( A[i]>=97&&A[i]<=122)  ||  (A[i]>=65&&A[i]<=90)  )  )
         {
         	InWord=1;
         	Count++;
         	F=i;
         	


  
		 }
		 if(InWord==1&&( A[i]>122 || A[i]<65 || (A[i]>90&&A[i]<97) ) )
		 {InWord=0;
		 	L=i;
		 	
		 	
		 
		 	
		 
		 }
		 if(InWord==1&&(A[i]<=122&&A[i]>=97||A[i]>=65&&A[i]<=90)&&A[i+1]==0)
		 {
		 	InWord=0;
		 	L=i+1;
		 }

		
		 if(F!=-1&&L!=-1)
		 {
		 
		 for(int h=0;h<(L-F)/2;h++)
		 {
	
		    Temp=A[F+h];
		 	A[F+h]=A[L-h-1];
		 	A[L-h-1]=Temp;
		 	
		 }
	
		 
		 for(int h=0;h<(L-F);h++)
		 {
		 	A[F+h]=Cc(Count,A[F+h]);
	
		 }
		 F=-1;
		 L=-1;
	}
	 i++;
	 }
	 
	 
	 
	 cout<<A<<endl;
 }
 
 
 
 
 
 
 char Cc(int n,char c)
 {
 if(c>=97&&c<=122)
 {
 if(c-n>=97)
 {
 	return c-n;
 }
 else
 {
 	return 'z'-(96+n-c);
 }
 }
 		
if(c>=65&&c<=90)
{
	if(c-n>=65)
	{
		return c-n;
	}
	else
	{
		return 'Z'-(64+n-c);
	}
}
 }


相關推薦

OpenJudge習題解答C++ --4112情報破譯-Cryptanalysis

題: 總時間限制:1000ms     記憶體限制:65536kB描述 A國和B國正在進行一場戰爭。A國通過間諜知道B國的情報加密規則為: 1.    僅對字母加密,其他符號保留(如空格,逗號等)

OpenJudge習題解答C++--4085陣列去重排序

題: 總時間限制: 1000ms 記憶體限制: 1000kB 描述 小吉是銀行的會計師,在處理銀行帳目的時候,遇到了一些問題。有一系列整數,其中含有重複的整數,需要去掉重複後,排序輸出,你能幫助小

OpenJudge習題解答C++--2690首字母大寫

題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述對一個字串中的所有單詞,如果單詞的首字母不是大寫字母,則把單詞的首字母變成大寫字母。在字串中,單詞之間通過空白符分隔,空白符包括:

OpenJudge習題解答C++--4072判斷多個點是否在同一直線

題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述 有N(1<=n<=100)< span="">個互不重合的點,並給出它們的座標(xi,yi),問這些點

OpenJudge習題解答C++--2704競賽評分

題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述現舉行一次小競賽,參賽的3支隊伍,編號為1,2,3.每支佇列輪流回答問題,如果回答正確,加10分;回答錯誤,扣10分;放棄回答不得

OpenJudge習題解答C++--4110聖誕老人的禮物-Santa Clau’s Gifts

題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述 聖誕節來臨了,在城市A中聖誕老人準備分發糖果,現在有多箱不同的糖果,每箱糖果有自己的價值和重量,每箱糖果都可以拆分成任意散裝組

OpenJudge習題解答C++--4045與3和5無關的數

題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述 一個正整數,如果它能被x整除,或者它的十進位制表示法中某個位數上的數字為x,則稱其為與x相關的數.現求所有小於等於n(n<

OpenJudge習題解答C++--3142:球彈跳高度的計算

題: 總時間限制: 1000ms 記憶體限制: 65536kB 描述 一球從某一高度落下(整數,單位米),每次落地後反跳回原來高度的一半,再落下。 程式設計計算氣球在第10次落地時,共經過多少米?

OpenJudge習題解答C++--4074積水量

tom size alt popu function 滲透 urn dsm img 題: 總時間限制: 1000ms 內存限制:65536kB 描寫敘述 凹凸不平的地面每當下雨的時候總會積水。如果地面是一維的。每一塊寬度都為1,高度是非負整數。

OpenJudge習題解答C++--40102011

輸入 ati and splay blue margin display 推薦 bstr 題: 總時間限制: 1000ms 內存限制: 65536kB 描寫敘述已知長度最大為200位的正整數n。請求出2011^n的後四位。 輸入第一行為一個正整

C語言程式設計第二版新版》第一章習題解答部分

1-20 //My solution:先將輸入字串儲存至陣列,將其detab後存入另一陣列,然後列印該陣列 #include <stdio.h> #define MAXLINE 100 #define TABSIZE 8 #define TAB '\t' in

2017度軟研C++

揮手 查找 翻轉 順序 win 數據庫 編程 指針 查找進程 問了很多,不過很多也都沒有問到,感覺有點偏,很深入的東西,越問越虛。第一次實習面試從百度開始,也從百度結束吧。看得見的差距,不想將就,所以還是拿最後一次機會去嘗試。win or go home, 所以雖然心態又一

full-speed-python習題解答--非同步程式設計Asynchronous programming

  Exercises with asyncio 1. Implement an asynchronous coroutine function to add two variables and sleep for the duration of the sum. Use the as

full-speed-python習題解答-- Coroutines

Python協同(coroutines)類似於生成器,會使用yield關鍵字,但它不是生成資料,而是通常消費(consume)資料。 Exercise with coroutines 1. Create a coroutine named “square” that prints the s

full-speed-python習題解答--生成器

迭代器(iterator)是經常與for迴圈一起使用的可迭代物件(iterable)。Python中的生成器(generator)是實現迭代器的一種方便方法。生成器不是class,而是使用yield關鍵字作返回值的函式。     1. Implement a gene

full-speed-python習題解答--迭代器

1.Implement an iterator class to return the square of all numbers from “a” to “b”. class all_number(object): def __init__(self,a,b): sel

OpenJudge-2950-摘花生-C語言

描述: 魯賓遜先生有一隻寵物猴,名叫多多。這天,他們兩個正沿著鄉間小路散步,突然發現路邊的告示牌上貼著一張小小的紙條:“歡迎免費品嚐我種的花生!——熊字”。 魯賓遜先生和多多都很開心,因為花生正是他們

開源物聯網框架ServerSuperIO 3.0正式釋出C#,跨平臺Win&Win10 Iot&Ubuntu&Ubuntu Mate,一套裝置驅動跨平臺掛載,附開發套件和教程。

3.0版本主要更新內容: 1.增加跨平臺能力:Win&Win10 Iot&Ubuntu&Ubuntu Mate 2.統一裝置驅動介面:可以一套裝置驅動,跨平臺掛載執行,降低人力成本,提高開發效率。 3.增加二次開發套件:支援控制檯和UI介面兩種方式。 4.增加配置工具:

WinFormC#第一篇登入頁面實現+SQL Server資料庫連線方式

前言 最近見習,要完成的一個作業。主要是WinForm(C#)開發,本想參考網上的Demo,但一直沒找到合適入門的,因此打算自己記錄一下整個開發過程,給予隊友和後面學習的人一些方便。 當然,我也是第一次學習WinForm,技術不夠成熟,程式碼也可能不夠

C++ Primer 第五版第六章習題答案

書籍版本:2019年9月第一版;王剛 楊巨峰譯;電子工業出版社 編譯器 : win10  && VS2015 這一篇從6.3節開始,也就是30題開始 6.30 報的是錯誤#1,沒有正確的返回值 6.31 返回區域性引用時無效,返回區域性定義的常量引