请大家多多点赞,你们的点赞是我更新的动力!!!谢谢!!!
时间限制: 1000 ms 内存限制: 65536 KB
提交数: 43028 通过数: 21319
【题目描述】
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1.原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2.逆序存储(abcd -> dcba )
3.大小写反转(abXY -> ABxy)
【输入】
一个加密的字符串。(长度小于50且只包含大小写字母)
【输出】
输出解密后的字符串。
【输入样例】
GSOOWFASOq
【输出样例】
Trvdizrrvj
【答题思路】
根据题目要求,逆序复原,但要注意a,b,c在移动时候的跨度问题。
【程序如下】
#include <bits/stdc++.h>
using namespace std;int main() {
string a;
cin >> a;
int len = a.length();
for (int i = 0; i < len; i++) {
if (a[i] <= 'z' && a[i] >= 'a') {
a[i] -= 32;
} else if (a[i] <= 'Z' && a[i] >= 'A') {
a[i] += 32;
}
}
string b;
for (int i = len - 1; i >= 0; i--) {
b += a[i];
}
for (int i = 0; i < len; i++) {
if (b[i] != 'x' && b[i] != 'y' && b[i] != 'z' && b[i] != 'X' && b[i] != 'Y' && b[i] != 'Z')
b[i] += 3;
else if (b[i] == 'x')
b[i] = 'a';
else if (b[i] == 'y')
b[i] = 'b';
else if (b[i] == 'z')
b[i] = 'c';
else if (b[i] == 'X')
b[i] = 'A';
else if (b[i] == 'Y')
b[i] = 'B';
else if (b[i] == 'Z')
b[i] = 'C';
}
cout << b << endl;
return 0;
}