Онлайн компилятор C

#include <stdio.h> int main() { int n,digit=0; scanf("%d",&n); int safe_n=n; while(digit<=9){ n=safe_n; int counter=0; while(n>0){ int current_digit=n%10; if(current_digit==digit){ counter++; } n=n/10; } if(counter>=2){ printf("YES"); return 0; } digit++; } printf("NO"); return 0; }
这段代码的作用是判断一个整数中是否存在某个数字(0-9)出现了至少两次。它通过外层循环遍历0到9每个数字,内层循环统计该数字在输入整数中出现的次数,一旦发现某个数字出现次数≥2就输出YES并结束,否则输出NO。

- 外层循环从digit=0开始,每次递增到9,但你的循环条件是digit<=9,这会导致digit从0到10共11次循环。当digit=10时,内层循环比较current_digit==digit永远不会成立,但多了一次无意义的循环。应该将条件改为digit<10,只检查0到9这10个数字。

- 变量counter在内层循环前重置为0是正确的,但注意每次外层循环都会重新设置n=safe_n,这没问题。不过你的代码逻辑已经能正确判断是否有重复数字,只是循环次数多了一次。