Online Compiler C

#include <stdio.h> int main() { int n,n0=0,n1=0,n2=0,n3=0,n4=0,n5=0,n6=0,n7=0,n8=0,n9=0,y; scanf("%d",&n); while(n!=0){y=n%10; n=n/10; if(y==0) n0++; if(y==1) n1++; if(y==2) n2++; if(y==3) n3++; if(y==4) n4++; if(y==5) n5++; if(y==6) n6++; if(y==7) n7++; if(y==8) n8++; if(y==9) n9++; if(n0==2||n1==2||n2==2||n3==2||n4==2||n5==2||n6==2||n7==2||n8==2||n9==2) {printf("YES"); return 0;} } else{printf("NO"); } return 0;
这段代码的作用是:读入一个整数,然后判断这个整数中是否包含某个重复出现两次的数字(比如112中1出现了两次)。如果存在这样的数字,就输出"YES",否则输出"NO"。

代码逻辑上有一个结构问题需要注意:

- 你使用了 `if(n0==2||...)` 来判断是否有数字出现两次,但这个判断放在了 `while` 循环内部。这意味着每次取出一位数字后都会立即检查,而不是等所有数字都统计完再检查。这样虽然也能工作,但逻辑上不够清晰,而且会导致循环提前结束。

- 另外,`else{printf("NO");}` 的位置不对。它没有和任何 `if` 配对,会导致编译错误。你需要考虑在循环结束后再判断是否输出"NO"。

提示:
- 思考一下,应该在什么时候判断是否有数字出现两次?是在循环过程中每取一位就判断,还是等所有数字都统计完再统一判断?
- 检查一下 `else` 应该和哪个 `if` 配对,以及它应该放在循环外面还是里面。