在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d",&n); int x=n%10; int flag=1; while(n!=0) { int y=n%10; if(y>=x) { flag=1; } x=y; n=n/10; } if(flag==1) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数的各位数字是否从左到右非递增(即每一位都不小于前一位)。但逻辑上有问题。

- 代码中 `flag` 初始为1,循环里当 `y>=x` 时又把 `flag` 设为1,这导致 `flag` 永远不会变成0,所以无论输入什么数字,最终都会输出"YES"。
- 实际上,你需要检查是否出现递减的情况(即后一位小于前一位),一旦出现就应标记为不符合条件。

- 思考一下:什么时候应该把 `flag` 设为0?是当 `y` 和 `x` 满足什么关系时?
- 另外,注意循环中 `x` 和 `y` 的更新顺序:当前 `x` 保存的是上一位数字,`y` 是当前位,比较后应该更新 `x` 为当前位。这个顺序是对的,但条件判断需要调整。