A24166. 加密的病历单
填空题
中等
知识点
题目描述
加密的病历单
题目描述
小英是药学专业大三的学生,暑假期间获得了去医院药房实习的机会。
在药房实习期间,小英扎实的专业基础获得了医生的一致好评,得知小英在计算概论中取得过好成绩后,主任又额外交给她一项任务,解密抗战时期被加密过的一些伤员的名单。
经过研究,小英发现了如下加密规律(括号中是一个“原文 -> 密文”的例子)
1.原文中所有的字符都在字母表中被循环左移了三个位置(dec -> abz)
2.逆序存储(abcd -> dcba )
3.大小写反转(abXY -> ABxy)
输入
一个加密的字符串。(长度小于50且只包含大小写字母)
输出
输出解密后的字符串。
输入样例
GSOOWFASOq输出样例
Trvdizrrvj参考答案
#include <bits/stdc++.h>
using namespace std;
void reverse(char s[])//倒序
{
int len = strlen(s);
for(int i = 0; i < len/2; ++i)
swap(s[i], s[len - 1 - i]);
}
void changeCase(char s[])//大小写转换
{
int len = strlen(s);
for(int i = 0; i < len; ++i)
{
if(isupper(s[i]))
s[i] = tolower(s[i]);
else if(islower(s[i]))
s[i] = toupper(s[i]);
}
}
void moveRight(char s[])//字母右移3位
{
int len = strlen(s);
for(int i = 0; i < len; ++i)
{
if(isupper(s[i]))
s[i] = (s[i] - 'A' + 3) % 26 + 'A';
else if(islower(s[i]))
s[i] = (s[i] - 'a' + 3) % 26 + 'a';
}
}
int main()
{
char s[55];
cin>>s;
moveRight(s);
changeCase(s);
reverse(s);
cout<<s;
return 0;
}答案解析
#include<bits/stdc++.h>
using namespace std;
int main()
{
char s[55], r[55], c;//s:输入的字符串 r:结果字符串
cin>>s;
int len = strlen(s), r_i = 0;//r_i:数组r的下标
for(int i = len - 1; i >= 0; i--)//由于是逆序存储,所以从后向前遍历
{
c = s[i];
if(c >= 'a' && c <= 'z')//字母向右移3个位置 并转换大小写
c = (c - 'a' + 3) % 26 + 'A';
else if(c >= 'A' && c <= 'Z')
c = (c - 'A' + 3) % 26 + 'a';
r[r_i++] = c;
}
r[r_i] = '\0';
cout<<r;
return 0;
}
上一题
下一题