跳转至

GESP202406 三级 移位

题意分析

给定一个正整数 $n$,代表偏移量。我们需要对大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 进行循环右移,即将每个字母向后移动 $n$ 个位置,超出 Z 的部分从 A 开始继续。

例如:

  • 当 $n = 3$,结果为 DEFGHIJKLMNOPQRSTUVWXYZABC
  • 当 $n = 26$ 或其倍数,结果为原始字母表不变

解题思路

本题本质上是将一个长度为 $26$ 的字符序列进行循环位移操作。

  • 我们可以从字符 'A''Z' 构造原始字母表。
  • 对于每一个字符,其 ASCII 值可以通过 (char)('A' + i) 构造得到。
  • 偏移后的字符应满足循环性质,即偏移后的位置为:new_char = 'A' + (i + n) % 26;

其中 i 是当前字符相对 'A' 的位置(即原始索引),n 是偏移量。


实现步骤

  • 读取输入整数 $n$。
  • 对偏移量 $n$ 取模 26,得到实际偏移量 k = n % 26
  • 使用一个循环从 i = 025
    • 对于每个位置 i,计算偏移后的位置为 (i + k) % 26
  • 对应的字符为:'A' + (i + k) % 26
  • 将字符依次输出即可。

时间复杂度分析

  • 时间复杂度:$O(26)$,即常数级别的循环处理,每次输出一个字符。
  • 空间复杂度:$O(1)$,仅使用常数个变量,无需额外数据结构。

总结

  • 本题属于典型的循环位移变换
  • 关键是利用 ASCII 编码将字符与数字进行转换,通过模运算实现循环偏移。
  • C++ 中,可以通过简单的循环和字符操作高效实现,效率和代码复杂度都非常低。