Online Compiler C

#include <stdio.h> int main() { int num; scanf("%d",&num); // 处理负数:只考虑数字部分,负号不影响数字相邻 if (num < 0) { num = -num; } // 如果数字小于 10,不可能有相邻两位 if (num < 10) { printf("NO\n"); return 0; } // 当数字还有至少两位时 int a,b=0; while(num>=10) { a=num%10; b=(num/10)%10; if(a==b) { printf("YES\n"); return 0; // 找到后立即结束程序 } else { printf("NO\n"); } num=num/10;//去掉当前整数的最后一位数字作为下一次循环的数 } return 0; }
这段代码的目的是判断一个整数中是否存在相邻的相同数字。它从个位开始,逐位比较相邻两位数字是否相等。

代码的主要问题在于输出逻辑。在循环中,每次比较两位数字后,如果不相等就立即输出"NO",这会导致错误的结果。例如,对于数字121,第一次比较个位1和十位2不相等,程序就会输出"NO"并结束,但实际上数字121中并没有相邻相同数字,这个输出是正确的,但如果是数字1221,第一次比较个位1和十位2不相等就输出"NO",而实际上后面有相邻的2和2,程序应该输出"YES"。

- 不要在循环内部每次不相等时就输出"NO"。应该只在循环结束后,确认所有相邻位都不相等时,才输出"NO"。
- 考虑使用一个标志变量来记录是否找到了相邻相同数字,循环结束后根据这个标志决定输出"YES"还是"NO"。