描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1. 原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2. 逆序存储(abcd -> dcba )
3. 大小写反转(abXY -> ABxy)
输入
一个加密的字符串。(长度小于50且只包含大小写字母)
输出
输出解密后的字符串。
输入样例 1
GSOOWFASOq
输出样例 1
Trvdizrrvj
解析
一道水题,跟我秒了它!
逆序
for (int i = d - 1; i >= 0; i--) {
//ToDo
}
for循环就可以逆序存储了。
大小写
for (int i = d - 1; i >= 0; i--) {
if (a[i] >= 'a' && a[i] <= 'z') {
//ToDo
} else if (a[i] >= 'A' && a[i] <= 'Z') {
//ToDo
}
}
如果a[i]在'a'和'z'的acill码之间,就......;如果a[i]在'A'和'Z'的acill码之间,就......
左移三个位置+反转
for(int i = d - 1; i >= 0; i--){
c = a[i];
if(c >= 'a' && c <= 'z')
c = (c - 'a' + 3) % 26 + 'A';
else if(c >= 'A' && c <= 'Z')
c = (c - 'A' + 3) % 26 + 'a';
b[e++] = c;
}
是不是有点晕?
大家可以自己算一下,因为我要赶作业(悲)。
原理稍后发评论区里面。
代码
最后......
《大家应该只会看这里》
3,2,1,上(链接)代码!
#include<bits/stdc++.h>
using namespace std;
int main(){
char a[55], b[55], c;
cin>>a;
int d = strlen(a), e = 0;
for(int i = d - 1; i >= 0; i--){
c = a[i];
if(c >= 'a' && c <= 'z')
c = (c - 'a' + 3) % 26 + 'A';
else if(c >= 'A' && c <= 'Z')
c = (c - 'A' + 3) % 26 + 'a';
b[e++] = c;
}
b[e] = '\0';
cout<<b;
return 0;
}
验证
大家来看看对不对:
OKK!
结尾
“这题好简单!”
“那可是,你看看这题来源是什么。”
“信奥一本通!”