在线编译器 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; }
这段代码的作用是判断一个整数中是否存在某个数字(0-9)出现了至少两次。它通过外层循环遍历所有可能的数字(0到9),内层循环逐位提取输入整数的每一位,并统计当前数字出现的次数。一旦发现某个数字出现两次或以上,就输出"YES"并结束程序;如果所有数字都检查完毕都没有重复,则输出"NO"。

- 内层循环的条件 `while (x >= 1)` 在处理数字0时会有问题。当输入的数字本身是0时,循环不会执行,导致无法正确判断。考虑一下如何让循环能处理数字0的情况。
- 变量 `counter` 在内层循环中每次遇到匹配的数字都会增加,但它在每次外层循环开始时没有被重置为0。这会导致统计结果累积,可能产生错误的判断。注意应该在每次检查新数字前重置计数器。