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

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

- 代码中 `m` 和 `n` 分别被赋值为 `i % 10`,但 `i % 10` 的结果是数字本身(即9),而不是位置或计数。你实际上是在比较两个值是否相等,而它们都是9,所以 `n == m` 永远为真,导致只要找到两个9就会输出"YES",无论它们是否相邻。
- 内层循环从当前数字的下一位开始检查,但外层循环已经移动了 `i`,内层循环继续处理剩余部分,这可能导致你检查的不是相邻的数字,而是相隔若干位的数字。

提示:
- 思考如何检查相邻的两个数字:当你在外层循环中找到一个9时,应该检查它的下一位(即 `i/10` 后的个位)是否也是9,而不是启动一个新的循环去遍历剩余所有位。
- 注意变量 `m` 和 `n` 的用途:你不需要存储数字本身,只需要一个标志或计数器来记录是否找到了相邻的9。