凯撒密码
时间限制(普通/Java) : 1000 MS/ 3000 MS 运行内存限制 : 65536 KByte
总提交 : 105 测试通过 : 51
很常规的做法~类似的题我一般都采用这种枚举的方法~
总提交 : 105 测试通过 : 51
题目描述
据说最早的密码来自于罗马的凯撒大帝。消息加密的办法是:对消息原文中的每个字母,分别用该字母之后的第5个字母替换(例如:消息原文中的每个字母A都分别替换成字母F)。
而你要获得消息原文,也就是要将这个过程反过来。
对应表如下:
密码字母:A B C D E F G H I J K L M N
O P Q R S T U V W X Y Z
原文字母:V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
那么问题来了,现在yuman手上有一篇密文,你能帮他翻译成明文么?
输入
先输入一个正整数T,表示样例数(1<=T<=1000)
对于每一个样例,先输入一个正整数n,代表字符串的长度(1<=n<=1000)
然后再输入一个长度为n的字符串,保证字符串中只含有大写字母;
输出
输出密文翻译出的明文;
样例输入
3
1
N
4
QTAJ
3
DTZ
样例输出
I
LOVE
YOU
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<set>
#include<map>
#include<vector>
#include<stack>
#include<cmath>
#include<string>
#include<algorithm>
using namespace std;
const int N=1000;
int main()
{
int T;
cin>>T;
while(T--!=0)
{
int n;
cin>>n;
char a[N];
cin>>a;
for(int i=0;i<n;i++)
{
if(a[i]=='A')
cout<<'V';
if(a[i]=='B')
cout<<'W';
if(a[i]=='C')
cout<<'X';
if(a[i]=='D')
cout<<'Y';
if(a[i]=='E')
cout<<'Z';
if(a[i]=='F')
cout<<'A';
if(a[i]=='G')
cout<<'B';
if(a[i]=='H')
cout<<'C';
if(a[i]=='I')
cout<<'D';
if(a[i]=='J')
cout<<'E';
if(a[i]=='K')
cout<<'F';
if(a[i]=='L')
cout<<'G';
if(a[i]=='M')
cout<<'H';
if(a[i]=='N')
cout<<'I';
if(a[i]=='O')
cout<<'J';
if(a[i]=='P')
cout<<'K';
if(a[i]=='Q')
cout<<'L';
if(a[i]=='R')
cout<<'M';
if(a[i]=='S')
cout<<'N';
if(a[i]=='T')
cout<<'O';
if(a[i]=='U')
cout<<'P';
if(a[i]=='V')
cout<<'Q';
if(a[i]=='W')
cout<<'R';
if(a[i]=='X')
cout<<'S';
if(a[i]=='Y')
cout<<'T';
if(a[i]=='Z')
cout<<'U';
}
cout<<endl;
}
return 0;
}
很常规的做法~类似的题我一般都采用这种枚举的方法~
版权声明:本文为博主原创文章,未经博主允许不得转载。