- Description
尤利乌斯?凯撒生活在一个充满战争与阴谋的时代,敌人们在他身边安插了无数间谍,时刻监视着他的一举一动。为了让自己的军事部署不被泄露,凯撒发明了一套密码用来与自己的将军们通信。
凯撒密码的加密方式如下:首先将原文中的每个字母改写为字母表中在其之后的第N个字母,若超出了字母表的范围则回到字母‘a’继续计数。比如N=1时就把原文中的‘a’全部改写为‘b’,‘b’改写为‘c’……而把‘z’改写为‘a’。完成这一步后,再将此时密文中所有的字符向后推M位(最后的M个字符放到开头),加密工作就完成了。现在给出N、M和密文,请你还原出加密前的原文。
- Input
输入数据有多组,每组数据的第一行给出N和M(|N|,|M|<=10),之后一行给出加密后的文本,密文仅含大小写英文字母以及空格‘ ’、逗号‘,’、句号‘.’这三种字符。数据保证加密前原文以字母开头,以句号结束,长度不超过100个字符。
Output
每组数据输出一行解密后得到的原文,输出时要求答案中每句话(以句号为结束符)的第一个字母大写,其余所有字母小写。
Sample Input
2 2
U.Kp yct, gxgpvu qh korqtvcpeg ctg vjg tguwnv qh vtkxkcn ecwug
- Sample Output
In war, events of importance are the result of trivial causes.
#include <iostream>
#include <cstring>
#include <cstdio>
//#include <fstream>
using namespace std;
#define N 110
char a[N],b[N];
int n,m;
void solve()
{
int l=strlen(a);
for(int i=0;i<l;i++)
{
if(a[i]>='A' && a[i]<='Z')
{
a[i]=a[i]+32;
}
b[(i+10*l-m)%l]=a[i];
}
for(int i=0;i<l;i++)
{
if(b[i]>='a' && b[i]<='z')
{
b[i]=(b[i]-'a'+26-n)%26+'a';
}
}
bool juhao=true;
for(int i=0;i<l;i++)
{
if(b[i]>='a' && b[i]<='z')
{
if(juhao)
{
b[i]-=32;
juhao=false;
}
}
else
{
if(b[i]=='.')
juhao=true;
}
}
b[l]=0;
printf("%s\n",b);
}
int main()
{
//freopen("data3.in","r",stdin);
//freopen("out.txt","w",stdout);
while(scanf("%d %d",&n,&m)!=EOF)
{
//scanf("%s",a);
getchar();
gets(a);
solve();
}
/*string a,b;
ifstream in1("data3.out");
ifstream in2("out.txt");
int i=0;
while(in1>>a)
{
i++;
in2>>b;
if(a!=b)
{
cout<<i<<endl
<<a<<endl
<<b<<endl;
break;
}
}*/
return 0;
}