【GESP】C++三级真题 luogu-B4003 [GESP202406 三级] 移位
GESP三级真题,字符串和一维数组相关题目,难度★★☆☆☆。
luogu-B4003 [GESP202406 三级] 移位
题目要求
题目描述
小杨学习了加密技术移位,所有大写字母都向后按照⼀个固定数目进行偏移。偏移过程会将字母表视作首尾相接的环,例如,当偏移量是 $3$ 的时候,大写字母 A 会替换成 D,大写字母 Z 会替换成 C,总体来看,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 会被替换成 DEFGHIJKLMNOPQRSTUVWXYZABC。
注:当偏移量是 $26$ 的倍数时,每个大写字母经过偏移后会恰好回到原来的位置,即大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 经过偏移后会保持不变。
输入格式
第一行包含一个正整数 $n$。
输出格式
输出在偏移量为 $n$ 的情况下,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 移位替换后的结果。
输入输出样例 #1
输入 #1
1
3
输出 #1
1
DEFGHIJKLMNOPQRSTUVWXYZABC
说明/提示
【样例解释】:
当偏移量是 $3$ 的时候,大写字母 A 会替换成 D,大写字母 Z 会替换成 C,总体来看,大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 会被替换成 DEFGHIJKLMNOPQRSTUVWXYZABC。
【数据范围】:
对于全部数据,保证有 $1\leq n\leq 100$。
题目分析
解题思路
本题的解题思路如下:
- 输入处理:
- 读取偏移量n(1 ≤ n ≤ 100)
- 字符串处理:
- 准备26个大写字母的字符串
- 计算实际需要偏移的位数(n % 26)
- 对每个字母进行偏移处理:
- 当前字母的ASCII码加上偏移量
- 如果超出’Z’的范围,需要回环到字母表开头
- 输出处理:
- 按顺序输出偏移后的字母表
复杂度分析:
- 时间复杂度:$O(1)$,只需要处理固定长度(26)的字符串
- 空间复杂度:$O(1)$,只需要常量级的存储空间
示例代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
int main() {
// 读取偏移量
int n;
std::cin >> n;
// 遍历26个大写字母
for (int i = 0; i < 26; i++) {
// 计算偏移后的ASCII码值
int cur_idx = 'A' + i + n % 26;
// 如果超出'Z'的ASCII码值,需要回环到字母表开头
if (cur_idx > 'Z') {
cur_idx -= 26;
}
// 输出偏移后的字符
std::cout << char(cur_idx);
}
return 0;
}
所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code
GESP各级别考纲要点、知识拓展和练习题目清单详见C++学习项目主页
“luogu-”系列题目已加入洛谷Java、C++初学团队,作业清单,可在线评测,团队名额有限,欢迎加入。
“bcqm-”系列题目可在编程启蒙题库进行在线评测。
本文由作者按照 CC BY 4.0 进行授权