竞赛
考级
点赞的GESP一遍过
话不多说,直接上代码 只有26个英文字母,所以直接26个分支,学过周期问题的朋友应该知道分支的原理的
题目描述 有一个由26个大写英文字母组成的字符串:ABCDEFGHIJKLMNOPQRSTUVWXYZ 现在给你一个整数n,你需要将这个字符串循环左移n位后输出。 循环左移是什么意思? 就像把一队小朋友排队,最前面的小朋友移到队伍最后面,其他小朋友都往前移动一位。例如: * 原始队伍:A B C D E F ... Z * 左移1位:B C D E F ... Z A * 左移2位:C D E F ... Z A B 解题思路 字母表只有26个字母,所以: 1. 左移26位就回到原样(相当于没移) 2. 左移27位和左移1位结果一样 所以我们先让n除以26取余数,这样n就会变成0~25之间的数。 然后: 1. 把字母表从第n个字母开始到最后的字母取出来(后面部分) 2. 再把字母表开头的n个字母取出来(前面部分) 3. 把这两部分拼接在一起 代码 如果题解对你有帮助的话,不妨留下你的点赞吧
求 ----------------------------------------------------------.|.
话不多说,上代码
1.int转char 2.打表
移位题目分析 1. 目标:将标准大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 中的每个字母向后移动 nnn 位。 2. 环形规则:字母表是首尾相接的环。如果移位超过了 Z,就要回到 A 继续。 * 例如:Z 向后移 1 位变成 A。 3. 数学原理: * 我们可以把 A 到 Z 看作数字 0 到 25。 * 对于任意一个字母,它的新位置 = (原位置 + n) % 26。 * 这里的 % 26(取模运算)非常关键,它解决了“超过 Z 回到 A”以及“n 很大(比如 n=100)”的问题。 解题步骤 1. 读取输入:读取整数 nnn。 2. 遍历字母表:我们可以用一个循环,从字符 'A' 遍历到 'Z'。 3. 计算新字符: * 先算出当前字符相对于 'A' 的偏移量:current_char - 'A'。 * 加上题目给的偏移量 nnn。 * 对 26 取模,处理循环和溢出:(current_char - 'A' + n) % 26。 * 再加回 'A' 变回字符:'A' + (...)。 4. 输出:打印计算出的新字符。 C++ 代码实现 代码详解与样例验证 样例输入: 执行过程: * 当 c = 'A': * c - 'A' = 0 * 0 + 3 = 3 * 3 % 26 = 3 * 'A' + 3 = 'D' * 输出 D * ...中间省略... * 当 c = 'X': * c - 'A' = 23 ('X'是第24个字母,索引23) * 23 + 3 = 26 * 26 % 26 = 0 (关键点:这里回到了0) * 'A' + 0 = 'A' * 输出 A * 当 c = 'Y': * c - 'A' = 24 * 24 + 3 = 27 * 27 % 26 = 1 * 'A' + 1 = 'B' * 输出 B * 当 c = 'Z': * c - 'A' = 25 * 25 + 3 = 28 * 28 % 26 = 2 * 'A' + 2 = 'C' * 输出 C 最终输出结果: DEFGHIJKLMNOPQRSTUVWXYZABC
题目解析 * 输入输出:输入一个正整数 nnn(1≤n≤1001 \le n \le 1001≤n≤100)表示偏移量。输出一行字符串,表示将标准大写字母表 ABCDEFGHIJKLMNOPQRSTUVWXYZ 每个字母向后偏移 nnn 位后的结果(循环移位,即 Z 偏移后接 A)。 * 数据范围:1≤n≤1001 \le n \le 1001≤n≤100,偏移量可能大于 26,需要取模处理。 * 复杂度要求:仅需处理 26 个字母,时间复杂度 O(26)O(26)O(26),即 O(1)O(1)O(1)。 * 算法知识点:模运算、ASCII码转换、循环移位 思路解析 1. 建立映射关系:将字母 A 到 Z 映射为数字 000 到 252525。对于第 iii 个字母(从 0 开始计数),偏移后的新位置为 (i+n) mod 26(i + n) \bmod 26(i+n)mod26。 2. 处理循环特性:由于字母表是首尾相接的环,使用取模运算 % 26 自动处理越界情况。例如 Z(对应 25)偏移 3 位:(25+3)%26=2(25 + 3) \% 26 = 2(25+3)%26=2,对应 C。 3. 转换回字符:将计算得到的数字(0-25)加上 'A' 的 ASCII 码值,转换回对应的大写字母并输出。 完整代码
提交答案之后,这里将显示提交结果~