在线编译器 C

#include <stdio.h> int main() { int i; scanf("%d", &i); if (i < 0) i = -i; if (i > 10) { int m = i % 10, p = 1, q = 1; while (i != 0) { int n; while (i != 0) { n = i % 10; i = i / 10; if (p != q && m == n) break; q++; } if (p != q && m == n) break; p++; m = i / 10 % 10; } } if (p != q && m == n) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否存在两个相同数字,且这两个数字之间至少隔了一个其他数字。但代码存在逻辑和变量作用域问题。

- 变量 `n` 和 `p`、`q` 只在 `if (i > 10)` 的块内定义,但最后 `if (p != q && m == n)` 在块外使用它们,这会导致编译错误或未定义行为。
- 外层 `while` 循环修改了 `i` 的值,导致原始数字丢失,且循环逻辑可能无法正确遍历所有数字对。

- 思考如何在不破坏原始输入值的情况下,提取每一位数字进行比较。
- 注意变量的作用域:在块内定义的变量不能在块外使用。