大家好,我叫亓官劼(qí guān jié ),在CSDN中记录学习的点滴历程,时光荏苒,未来可期,加油~博客地址为:亓官劼的博客,亓官劼的博客2。
第十一届 蓝桥杯 省 模拟赛 完整题目+题解地址为:第十一届 蓝桥杯 省 模拟赛 试题+题解
题目
问题描述
给定一个单词,请使用凯撒密码将这个单词加密。
凯撒密码是一种替换加密的技术,单词中的所有字母都在字母表上向后偏移3位后被替换成密文。即a变为d,b变为e,…,w变为z,x变为a,y变为b,z变为c。
例如,lanqiao会变成odqtldr。
输入格式
输入一行,包含一个单词,单词中只包含小写英文字母。
输出格式
输出一行,表示加密后的密文。
样例输入
lanqiao
样例输出
odqtldr
评测用例规模与约定
对于所有评测用例,单词中的字母个数不超过100。
题解
这题我们直接将读入的数据进行一个转化就好,每个字母向后移动3个,z移动后为c,即是循环移动。需要注意的是,题目中未说明是否会有空格,以及其他字符,所以这里保险起见,我们使用getline进行读取。然后这里同样的未说明是否只有小写字母,所以我们将大写字母的情况也列出来了,如果非字母,则不变。
完整的程序为:
#include <iostream>
using namespace std;
// 对字母进行后移
char solve(char ch){
if(int(ch) <= 122 && int(ch) >= 97){
// 小写字母时,97 - 122
return char(97 + ((int(ch) - 97 + 3) % 26));
} else if(int(ch) >= 65 && int(ch) <= 90){
// 大写字母时,65 - 90
return char(65 + ((int(ch) - 97 + 3) % 26));
}else{
// 非字母直接返回
return ch;
}
}
int main() {
string str = "";
getline(cin,str);
int length = str.length();
for(int i = 0; i < length; i++){
str[i] = solve(str[i]);
}
cout<<str;
return 0;
}