在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d", &n); int flag = 0; while (n > 0) { int last = n % 10; int pre = (n / 100) % 10; if (last == pre) { flag = 1; break; } n /= 10; } if (flag == 1) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否存在相隔一位的两个相同数字,但逻辑有误。

- 代码中 `pre = (n / 100) % 10` 取的是当前数字的百位,而不是前一位的前一位。例如对于数字 12345,当 `n=12345` 时,`last=5`,`pre=3`,这比较的是个位和百位,而不是相隔一位的数字。
- 实际上,要检查相隔一位的两个数字,应该比较当前位和它前面两位的数字。比如数字 121,个位1和百位1相隔一位,但你的代码在 `n=121` 时,`last=1`,`pre=1`,虽然结果正确,但原理不对,因为 `pre` 取的是百位,而百位正好是相隔一位的位置。对于更长的数字,比如 1231,个位1和千位1相隔两位,你的代码会错误地比较个位和百位。

- 提示:你需要跟踪数字的每一位,并比较当前位和它前面两位的数字。可以考虑用数组存储每一位,或者用变量记录前两位的数字。