加密的病历单
题目描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 → 密文”的例子)
-
原文中所有的字符都在字母表中被循环左移了三个位置($\text{bcd} \to \text{yza}$)
-
逆序存储($\text{abcd} \to \text{dcba}$)
-
大小写反转($\text{abXY} \to \text{ABxy}$)
现在给出一个加密的字符串,请你将其解密。
输入格式
一个加密的字符串。(长度小于 $50$ 且只包含大小写字母)
输出格式
输出解密后的字符串。
样例 #1
样例输入 #1
GSOOWFASOq
样例输出 #1
Trvdizrrvj
C++代码
#include <iostream>
#include <algorithm>
#include <string>
#include <cstdio>
using namespace std;
int main(){
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
string s,ans;
cin>>s;
reverse(s.begin(),s.end());
for(int i=0;i<s.size();i++){
char c=s[i];
if(c=='x'){
c='a';
}else if(c=='y'){
c='b';
}else if(c=='z'){
c='c';
}else if(c=='X'){
c='A';
}else if(c=='Y'){
c='B';
}else if(c=='Z'){
c='C';
}else{
c+=3;
}
if(isupper(c)){
c+=' ';
}else{
c-=' ';
}
ans+=c;
}
cout<<ans;
return 0;
}