题解
判断相邻字符
1 条题解
-
0
解题思路
输入两个不同的小写字母,判断它们在字母表里是不是挨在一起的。比如 e 和 f 相邻,e 和 g 不相邻。
怎么判断"相邻"?字母在计算机里其实是用数字存储的:a 是 97,b 是 98,c 是 99……依次加 1。所以两个字母在字母表里的距离,就等于它们对应的数字之差。
比如 e 对应 101,f 对应 102,e 和 f 相差 1,所以相邻。e 和 g 相差 2,不相邻。
做法:
- 读入两个字符 a 和 b;
- 算出两个字母相差多少:因为不知道谁大谁小,用 if 判断一下,用较大的减去较小的,得到差 diff;
- 如果 diff 等于 1,说明相邻,输出 YES;否则输出 NO。
注意:题目要求用 if 语句实现,所以我们不用现成的求绝对值函数,自己用 if 就能算出相差多少。这也是对 if 语句的一种训练:先判断大小,再决定谁减谁。
想一个边界:两个字母顺序反过来,比如输入 f 和 e,同样相差 1,也要输出 YES。我们先用 if 判断谁大、用大的减小的,所以输入顺序没有影响,程序都一样判断正确。
再验证:输入 a 和 c,c - a = 2,不是 1,中间隔了一个 b,所以不相邻,输出 NO。
参考代码
#include <iostream> using namespace std; int main() { char a, b; // 两个小写字母 cin >> a >> b; // 计算两个字母相差多少:用大的减去小的 int diff; if (a > b) { diff = a - b; // a 比 b 大,用 a 减 b } else { diff = b - a; // b 比 a 大,用 b 减 a } if (diff == 1) { // 相差 1,说明是相邻字母 cout << "YES" << endl; } else { // 相差不止 1,不相邻 cout << "NO" << endl; } return 0; }复杂度分析
只读入 2 个字符,做一次减法和两次比较,运算次数固定。时间复杂度和空间复杂度都是 O(1)。
- 1