在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d",&n); while(n>0){ int last=n%10; int last_sec=(n/10)%10; if(last==last_sec){ printf("YES"); return 0; } n=n/10; } printf("NO"); return 0; }
这段代码的作用是判断一个整数中是否存在相邻的两位数字相同。它从右向左依次检查每对相邻数字,如果发现相同就输出YES并结束,否则输出NO。

- 你的代码只检查了最后两位数字(last和last_sec),但循环中每次n=n/10后,新的最后一位是原来的倒数第二位,而新的倒数第二位是原来的倒数第三位,这样实际上只检查了原始数字中相邻的两位,而不是所有相邻对。思考一下:当n变成n/10后,新的last和last_sec是否还是原始数字中相邻的两位?
- 另外,当数字只有一位时,循环不会执行,直接输出NO,这符合逻辑吗?一位数没有相邻两位,输出NO是合理的。