Online Compiler C

#include <stdio.h> int main() { int a; scanf("%d",&a); int m; m=a%10; a=a/10; while(a>0&&a%10 !=m) { m=a%10; a=a/10; } if(a !=0) printf("YES"); else printf("NO"); return 0; }
这段代码的目的是判断一个整数中是否存在相邻且相等的数字对。程序从个位开始,依次比较相邻两位数字是否相等。

- 代码先读取整数,然后取个位数字存入m,再去掉个位。
- 循环中,每次比较当前个位数字是否等于之前保存的m,如果不相等就更新m并继续,如果相等就退出循环。
- 循环结束后,通过判断a是否被除到0来决定输出YES或NO。

这里有一个逻辑问题:循环条件写的是“a>0且当前个位不等于m”,这意味着当遇到相等时就退出循环。但退出后,如果a不为0,说明是因为找到相等对而退出,输出YES;如果a为0,说明遍历完所有数字都没找到相等对,输出NO。这个思路本身是对的,但实现细节需要注意。

- 提示1:考虑一下,如果数字本身就是个位数(比如输入5),循环条件a>0一开始就不成立,直接跳到后面的判断。此时a为0,会输出NO。但一个个位数没有相邻数字,应该输出NO吗?题目要求是什么?请确认题目是否要求个位数的情况。
- 提示2:再检查一下循环内部的逻辑。当a%10等于m时,循环会退出,但此时a还没有被除以10,所以a还保留着当前这一位。后面的判断if(a !=0)是否准确反映了“找到相等对”的条件?例如输入112,第一次循环a=11,m=2,a%10=1不等于2,更新m=1,a=1;第二次循环a=1>0,a%10=1等于m,退出循环,此时a=1,输出YES,这是正确的。但输入121呢?请手动模拟一下,看看结果是否符合预期。