文章

【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$。


题目分析

解题思路

本题的解题思路如下:

  1. 输入处理:
    • 读取偏移量n(1 ≤ n ≤ 100)
  2. 字符串处理:
    • 准备26个大写字母的字符串
    • 计算实际需要偏移的位数(n % 26)
    • 对每个字母进行偏移处理:
      • 当前字母的ASCII码加上偏移量
      • 如果超出’Z’的范围,需要回环到字母表开头
  3. 输出处理:
    • 按顺序输出偏移后的字母表

复杂度分析:

  • 时间复杂度:$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 进行授权