字符串
2026-07-22 10:56:44
发布于:湖北
10阅读
0回复
0点赞
移位题目分析
- 目标:将标准大写字母表
ABCDEFGHIJKLMNOPQRSTUVWXYZ中的每个字母向后移动 位。 - 环形规则:字母表是首尾相接的环。如果移位超过了
Z,就要回到A继续。- 例如:
Z向后移 1 位变成A。
- 例如:
- 数学原理:
- 我们可以把
A到Z看作数字0到25。 - 对于任意一个字母,它的新位置 =
(原位置 + n) % 26。 - 这里的
% 26(取模运算)非常关键,它解决了“超过 Z 回到 A”以及“n 很大(比如 n=100)”的问题。
- 我们可以把
解题步骤
- 读取输入:读取整数 。
- 遍历字母表:我们可以用一个循环,从字符
'A'遍历到'Z'。 - 计算新字符:
- 先算出当前字符相对于
'A'的偏移量:current_char - 'A'。 - 加上题目给的偏移量 。
- 对 26 取模,处理循环和溢出:
(current_char - 'A' + n) % 26。 - 再加回
'A'变回字符:'A' + (...)。
- 先算出当前字符相对于
- 输出:打印计算出的新字符。
C++ 代码实现
#include <iostream>
using namespace std;
int main() {
int n;
// 1. 读取偏移量 n
cin >> n;
// 2. 遍历大写字母表 A 到 Z
// 字符 'A' 的 ASCII 码是 65, 'Z' 是 90
for (char c = 'A'; c <= 'Z'; c++) {
// 3. 核心公式计算移位后的字符
// 步骤分解:
// (c - 'A'):把字符变成 0-25 的数字 (例如 A->0, B->1)
// + n:加上偏移量
// % 26:对 26 取模,实现环形移位 (超过 Z 回到 A)
// + 'A':把 0-25 的数字变回字符
char ne = 'A' + (c - 'A' + n) % 26;
// 4. 输出新字符
cout << ne;
}
// 最后输出一个换行符,保持格式整洁
cout << endl;
return 0;
}
代码详解与样例验证
样例输入:
3
执行过程:
-
当 c = 'A':
c - 'A'= 00 + 3= 33 % 26= 3'A' + 3= 'D'- 输出 D
-
...中间省略...
-
当 c = 'X':
c - 'A'= 23 ('X'是第24个字母,索引23)23 + 3= 2626 % 26= 0 (关键点:这里回到了0)'A' + 0= 'A'- 输出 A
-
当 c = 'Y':
c - 'A'= 2424 + 3= 2727 % 26= 1'A' + 1= 'B'- 输出 B
-
当 c = 'Z':
c - 'A'= 2525 + 3= 2828 % 26= 2'A' + 2= 'C'- 输出 C
最终输出结果:
DEFGHIJKLMNOPQRSTUVWXYZABC
这里空空如也



有帮助,赞一个