Online Compiler C

#include <stdio.h> int main() { int n, m = 0, a, b=0; scanf("%d", &n); while (n != 0) { a = n % 10; if (a == b) { m = 1; break; } b = a; n = n / 10; } if (m == 1) printf("YES"); else printf("NO"); return 0; }
这段代码的功能是判断一个整数中是否有相邻的相同数字。它从右向左逐位检查,如果发现某一位和它右边的数字相同,就输出YES,否则输出NO。

- 变量m用来标记是否找到相邻相同数字,初始为0。变量b用来保存上一个处理的数字(即当前位的右边一位),初始为0。这里有一个问题:b的初始值0可能会与数字中的0产生误判。例如输入数字10,个位是0,十位是1,但b初始为0,当处理个位0时,a等于0,b也等于0,就会错误地认为相邻相同。
- 另一个需要注意的地方是,程序只检查了相邻两位是否相等,但题目要求的是“相邻相同数字”,这个逻辑本身是正确的,但初始值b=0会导致边界情况出错。