在线编译器 C

#include <stdio.h> int main() { int n; scanf("%d", &n); int save_n = n; int digit = 0; while (digit <= 9) { n = save_n; int counter = 0; while (n > 0) { int curent_digit = n % 10; if (digit == curent_digit) { counter++; } n = n / 10; } if (counter >= 2) { printf("YES\n");} else{ printf("NO\n"); } return 0; }
这段代码试图判断一个整数中是否包含某个重复出现至少两次的数字,但存在逻辑错误。

代码的主要思路是:用外层循环让 digit 从 0 到 9 依次检查,内层循环统计当前 digit 在数字中出现的次数,如果次数 >=2 就输出 YES,否则输出 NO。

问题在于:
- 外层循环 while (digit <= 9) 没有递增 digit,导致无限循环。
- 每次循环都重新输出 YES 或 NO,而不是只输出一次最终结果。
- return 0 放在了循环内部,导致程序在第一次循环后就结束。

- 检查 digit 变量是否在每次循环后递增,否则循环条件永远为真。
- 思考程序应该输出一次结果(YES 或 NO),而不是对每个数字都输出一次。