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==2||n1==2||n2==2||n3==2||n4==2||n5==2||n6==2||n7==2||n8==2||n9==2) { printf("YES"); return 0; } printf("NO"); } return 0; }
这段代码的功能是:读取一个整数,然后逐位检查它的十进制数字,一旦发现某个数字出现了两次,就输出"YES"并结束程序。否则,在循环结束后输出"NO"。

代码中存在一个逻辑错误:每次循环都会输出"NO",导致程序在第一次循环后就会输出"NO"并继续执行,而不是在所有数字都检查完后再判断。

- 检查输出"NO"的位置:它被放在了循环内部,导致每次处理一位数字后都会输出一次"NO"。应该把输出"NO"的语句移到循环结束之后,确保只有在所有数字都检查完且没有重复时才输出。
- 注意循环结束的条件:当n变为0时循环结束,此时所有数字都已处理完毕,这时再根据是否有重复数字来决定输出"YES"还是"NO"。