在线编译器 C

#include <stdio.h> int main() { int n, a, b, i = 1, p = 1; scanf("%d", &n); if (n < 10) printf("NO"); while (n >= 10) { a = n % 10; b = (n / 10) % 10; if (a <= b) { break; } else i++; n = n / 10; p++; } if (p == i && i > 2) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数是否严格从左到右递增(即每一位数字都比前一位大)。但逻辑上有一些问题。

- 变量 `i` 用来计数满足递增条件的位数,`p` 用来记录总位数。但 `i` 初始为1,`p` 初始也为1,这可能导致计数不准确。
- 循环条件 `while (n >= 10)` 只处理至少两位数的数字,但循环内部每次除以10会改变 `n`,导致后续比较可能出错。
- 当遇到不满足递增的情况时,`break` 跳出循环,但此时 `i` 和 `p` 的计数可能已经不正确。

- 提示1:检查变量 `i` 和 `p` 的初始值是否合理。对于一位数的情况,代码直接输出"NO",但题目要求可能不同,需要确认。
- 提示2:循环中每次比较的是当前最低位和次低位,但除以10后数字顺序会反转,这会影响递增判断的方向。思考如何正确地从左到右或从右到左比较相邻数字。