top1编程
← 返回题目
题解

相邻字母

1 条题解

  • 0
    @ 2026-8-4 1:58:27

    解题思路

    输入一个字母(范围是 B-Y 或 b-y),输出它前面一个字母、它自己、它后面一个字母,中间用空格隔开。例如输入 B,输出 A B C。

    关键还是 ASCII 表:字母按顺序排列,编号连续。A 是 65,B 是 66,C 是 67…… 所以:

    • 前一个字母 = c - 1:把编号减 1;
    • 后一个字母 = c + 1:把编号加 1。

    比如输入 B(编号 66):前一个是 65 → A,后一个是 67 → C,所以输出 A B C。

    题目为什么限定范围是 B-Y 或 b-y?因为如果是 A 或 Z,往前或往后会超出字母表(A 前面没有字母)。题目限定范围后,就保证了 c-1 和 c+1 一定还在字母表里,我们就不需要额外写判断边界的代码。

    输出时注意两点:一是三个字母之间用空格隔开,二是要把字符转换写清楚。char(c - 1) 表示把编号 c-1 转回字符类型;如果漏了 char(),输出的就是编号数字而不是字母。

    参考代码

    #include <iostream>
    using namespace std;
    
    int main() {
        char c;         // c:输入的那个字母
        cin >> c;       // 读入一个字母
        // 前一个字母:编号减1后转回字符
        cout << char(c - 1) << " ";
        // 中间字母:就是原来的字母
        cout << c << " ";
        // 后一个字母:编号加1后转回字符
        cout << char(c + 1) << endl;
        return 0;
    }
    

    复杂度分析

    程序只做两次加减和三次输出,运算次数固定,和输入的是哪个字母无关。所以时间复杂度是 O(1),空间复杂度也是 O(1)(只用了 1 个 char 变量)。

    这类字母题的本质都是 ASCII 编号的加减,遇到“相邻字母”“大小写转换”都能用同一套思路解决。

    • 1