在线编译器 C

#include <stdio.h> int main() { int a; scanf("%d", &a); int used[10] = {0}; int ok = 0; while (a > 0) { int d = a % 10; if (used[d] == 1) { ok = 1; break; } used[d] = 1; a = a / 10; if (ok == 1) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否有重复的数字。它读取一个整数,然后检查每一位数字是否出现过。但代码的逻辑和结构有一些问题。

- 代码中 `if (ok == 1)` 的判断放在了 `while` 循环内部,而且紧接着 `return 0;`,这会导致循环只执行一次就结束,无法检查所有数字。
- 输出语句应该放在循环结束后,而不是在每次检查数字时都输出。

- 检查一下 `while` 循环的结束条件:当 `a` 变为 0 时循环结束,但此时 `ok` 的值才能最终确定是否有重复数字。
- 想一想输出语句应该放在循环外面还是里面?如果放在循环里面,每次检查一个数字都会输出一次,这不符合题意。