Онлайн компилятор C

#include <stdio.h> int main() { int i; scanf("%d", &i); if (i < 0) i = -i; int m = i % 10, p = 1, q = 1; if (i > 10) { 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` 在 `while` 循环内部定义,但在循环外部被使用,这会导致编译错误或未定义行为。变量的作用域需要仔细考虑。
- 外层 `while` 循环修改了 `i` 的值,但内层循环也在修改 `i`,这会导致外层循环的终止条件 `i != 0` 可能被意外满足,从而提前结束循环。你需要思考如何在不破坏原始数据的情况下遍历数字的每一位。
- 变量 `p` 和 `q` 的用途不清晰,它们似乎试图记录位置,但更新逻辑可能不正确。建议先明确算法思路:如何检查一个数字中是否有两个相同且不相邻的数字?例如,可以先将数字的每一位存入数组,然后再检查。