問題の説明:
ジュリアス・シーザーは危険と陰謀の時に住んでいました。シーザーがこれまで直面している最も困難な状況が生きている自分自身を保っていました。彼が生き残るためには、彼は最初の暗号のいずれかを作成することを決めました。この暗号は、信じられないほど誰もそれが働いた方法を知らなくても、それを把握することができなかったことを、音でした。
あなたはシーザーの軍隊のサブキャプテンです。これは、シーザーによって送信されたメッセージを解読して、一般的に提供するために、あなたの仕事です。コードは単純です。プレーンテキストメッセージ内の各文字について、あなたは安全なメッセージ(文字が「A」である場合、すなわち、暗号文は「F」になります)を作成するために、右に5箇所、それをシフトします。あなたは反対のことを行います、シーザーのメッセージのうち、プレーンテキストを作成しているので:
暗号文
ABCDEFGHIJKLMNOPQRSTU VWXYZ
プレーンテキストを
VWXYZABCDEFGHIJKLMNOP QRSTU
のみ文字がこの暗号にシフトしています。任意のアルファベット以外の文字が同じままにしてください、そして、すべてのアルファベット文字が大文字になります。
入力:
この問題への入力は、最大100個のデータセットの(空でない)シリーズで構成されます。各データセットは、以下の説明に従ってフォーマットされ、データセットを分離する空白行が存在しないであろう。すべての文字が大文字になります。
単一のデータ・セットは、3つのコンポーネントがあります:
-単一の行、「START」スタートライン
暗号メッセージ- 1から200個の文字に含む単一の行を、包括的、シーザーから単一のメッセージからなる
エンドライン-単一の行、「END」を
最終的なデータセットに続いて一行、「ENDOFINPUT」になります。
出力:
各データセットの場合は、出力の正確に一つの行が存在します。これはシーザーによるオリジナルのメッセージです。
サンプル入力:
開始
NS BFW、JAJSYX TK NRUTWYFSHJボトルYMJ WJXZQY TK YWNANFQ HFZXJX
終わり
開始
N BTZQI WFYMJW GJ KNWXY NS F QNYYQJ NGJWNFS ANQQFLJ YMFS XJHTSI NS WTRJ
終わり
開始
IFSLJW PSTBX KZQQ BJQQ YMFY HFJXFW NX RTWJ IFSLJWTZX YMFS MJ
終わり
ENDOFINPUT
サンプル出力:
戦争で、重要度のイベントは簡単な原因の結果であります
私はむしろ、最初にA LITTLEイベリアVILLAGE THAN SECONDローマだろう
危険CAESARはHEよりも危険であることをFULL WELLを知っています
問題解決のアイデア:
データの各セットは、この質問の3行ですSTARTから、26通の英語の手紙のEND端は5が前進し、各文字を処理している、と言うことです、我々はEにAでASCIIコードを、覚えておく必要があります特別な場合、前方への移動が後方5つの21移動に等しく、他の21の文字は正常です。
プログラムコード:
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
int main()
{
string str,start,end;
while(getline(cin,start))
{
if(start=="START")
getline(cin,str);
if(start=="ENDOFINPUT")
break;
for(int i=0;i<str.length();i++)
{
if(str[i]>='A'&&str[i]<='Z')
{
if(str[i]>='A'&&str[i]<='E')
str[i]+=21;
else
str[i]-=5;
}
}
getline(cin,end);
if(end=="END")
{
for(int i=0;i<str.length();i++)
cout<<str[i];
cout<<endl;
}
}
return 0;
}