李欣泽
(李欣泽)
1
加密的病历单
Problem ID: 9414
Contest ID: 5320
必做题
Wrong Answer
60 分
【题目描述】
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 → 密文”的例子)
1.原文中所有的字符都在字母表中被循环左移了三个位置(dec → abz)
2.逆序存储(abcd → dcba )
3.大小写反转(abXY → ABxy)
【数据格式】
输入一个加密的字符串。(长度小于50且只包含大小写字母)
输出解密后的字符串。
样例输入:
GSOOWFASOq
样例输出:
Trvdizrrvj
2 个赞
李欣泽
(李欣泽)
2
这是代码
#include<bits/stdc++.h>
using namespace std;
int main(){
string a;
cin>>a;
//大小写反转
for(int i=0;i<a.size();i++){
if(isupper(a[i])){
a[i]+=32;
}
else{
a[i]-=32;
}
}
//逆序存储
for(int i=0,j=a.size()-1;i<j;i++,j--){
swap(a[i],a[j]);
}
//右移了三个位置
for(int i=0;i<a.size();i++){
if(a[i]+3<='z'){
a[i]+=3;
}
else{
a[i]-=23;
}
}
//输出
cout<<a;
return 0;
}```
3 个赞
宋培勋
(Shirasu_Azusa_)
3
你的逆序存储出错了。当i>a.size()/2,j<a.size()/2时,你又把它们换回来了。 就像
string a="abcdef"
1 => fbcdea
2 => fecdba
3 => fedcba
4 => aedcbf
5 => abdcef
6 => abcdef
“更多”做法
这里有一种很不符合逻辑的做法
已知这三步只是对单个字符进行操作,没有多字符同时操作。
那么,我们就可以将逆序存储放在最后,变为逆序输出,使得总顺序变为 大小写转换→右移三位→输出。
(至于逆序输出,我猜你应该会,就不多赘述了)
3 个赞