在线编译器 C

#include <stdio.h> int main() { int i, z; scanf("%d", &i); if (i < 0) i = -i; z = i; int n = 0, m = 0; while (z > 0) { m = z % 10; while (i > 0) { n = i / 10 % 10; if (n == m && i != z / 10) break; i = i / 10; } if (n == m && i != z / 10) break; z = z / 10; i = z; } if (n == m && i != z / 10) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否存在两个相同的相邻数字(例如1223中的"22")。但代码逻辑存在一些问题,导致结果可能不正确。

- 代码中多次修改了变量 `i` 的值,导致外层循环和内层循环的边界条件混乱,无法正确遍历每一位数字。
- 变量 `n` 和 `m` 的更新时机与比较逻辑不匹配,可能漏掉或误判相邻数字对。
- 循环终止条件 `i != z / 10` 的意图不清晰,且 `z` 在不断变化,导致条件判断不可靠。

- 提示1:考虑用两个独立的循环或一个循环来比较相邻位,而不是嵌套循环同时修改同一个原始变量。可以尝试先提取所有数字到数组中,再检查相邻元素。
- 提示2:注意每次比较时,应该比较当前位和下一位,而不是用两个不同来源的变量(如 `m` 和 `n`)分别从不同方向取值。确保比较的是相邻位置上的数字。