Online Compiler C

#include<stdio.h> int main(void) { 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==1||n1==1||n2==1||n3==1||n4==1||n5==1||n6==1||n7==1||n8==1||n9==1) { printf("YES"); return 0; } printf("NO"); } return 0; }
这段代码试图判断一个整数中是否包含重复的数字。但代码中有多个语法错误和逻辑问题。

- 第7行 `y=n%10` 后面缺少分号,导致编译错误。
- 第8行之后的所有 `if` 语句写法错误。C语言中 `if` 的条件判断需要用圆括号括起来,并且多个语句需要用花括号。你写成了 `if(y==0,n0++)`,这种逗号表达式不会按你期望的方式工作。
- 逻辑上,你在每次取出一位数字后立即检查是否有某个数字出现次数达到1,但此时计数器刚增加,如果之前没有重复,这个检查永远不会成立。实际上你应该先统计完所有数字,再检查是否有重复。

- 提示1:先修正语法错误,特别是缺少的分号和 `if` 语句的正确格式。每个 `if` 应该写成 `if (y == 0) { n0++; }` 这样的形式。
- 提示2:思考一下判断重复的逻辑。你需要在循环结束后,检查每个计数器是否大于1,而不是在循环中每次只检查是否等于1。