计算机能力挑战初赛2020.19题
题目描述:
现要对一个由字符a-z和A-Z组成的字符串进行解密,已知加密规则是:
字符串中所有字符分别在大写或小写的字母表中被循环左移5位(fGh-->aBc),
输入:一个加密过的字符串(( 长度大于1 且小于50 且只包含大小写字母)。
输出:输出解密后的字符串
样例输入:AbcExyZ
样例输出:FghJcdE
题目分析:
和同一年的第17题相似,显然要将字符转换成ASCII码。
再通过取模的方式实现循环右移的功能。
观察字符右移前后的ASCII码:
V | 86 | A | 65 |
W | 87 | B | 66 |
X | 88 | C | 67 |
Y | 89 | D | 68 |
设右移前的ASCII码为,右移后为,易得:
大部分代码可沿用同一套题的第17题代码。
最终代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(void) {
char str_1[5000];
scanf("%s", str_1);
char str_2[5000];
for (int i = 0; i <= strlen(str_1); i++) {
if (i < strlen(str_1)) {
if (str_1[i] < 95) {
str_2[i] = (str_1[i] - 59) % 26 + 64;
}
else {
str_2[i] = (str_1[i] - 91) % 26 + 96;
}
}
else {
str_2[i] = 0;
}
}
printf("%s", str_2);
return 0;
}