在线编译器 C

#include <stdio.h> int main() { int x, x0, digit = 0, counter = 0; scanf("%d", &x); x0 = x; while (digit <= 9) { x = x0; int current_digit; while (x >= 1) { current_digit = x % 10; x = x / 10; if (digit == current_digit) { counter++; } if (counter >= 2) { printf("YES"); } return 0; } digit++; } printf("NO"); return 0; }
这段代码试图判断一个整数中是否存在某个数字出现至少两次。但代码的逻辑有严重问题,导致它无法正确工作。

主要问题在于 `return 0;` 的位置。当程序进入内层循环后,无论是否找到重复数字,都会立即执行 `return 0;` 并结束整个程序。这意味着外层循环实际上只执行了一次(digit=0的情况),而且内层循环也只检查了第一个数字就退出了。

另外,`counter` 变量没有在内层循环开始时重置,导致计数会累积错误。同时,`while (x >= 1)` 这个条件对于处理数字0也有问题,因为如果x本身是0,循环根本不会执行。

- 检查 `return 0;` 的位置。它应该只在找到重复数字时执行,而不是在每次内层循环迭代后都执行。
- 思考 `counter` 变量应该在什么时候重置为0,才能正确统计每个数字出现的次数。