Online Compiler 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) { int n = 0; while (i != 0) { while (i != 0) { q = 1; 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) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否存在两个相同的数字相邻出现。但代码逻辑比较混乱,存在嵌套循环和变量使用不当的问题。

- 代码先取绝对值,然后取个位数作为m,用p和q作为计数器。
- 外层循环每次更新m为新的个位数,内层循环遍历剩余数字。
- 但内层循环会完全消耗掉i,导致外层循环无法正确继续。
- 变量p和q的初始值都是1,但判断条件p != q在初始时就不成立,导致逻辑可能出错。

- 提示1:内层循环每次都会把i变成0,导致外层循环无法继续。你需要思考如何在不破坏原始数字的情况下遍历每一位。
- 提示2:判断相邻重复数字只需要一次遍历,不需要嵌套循环。考虑用一个变量记录前一位数字,然后逐位比较当前位和前一位是否相等。