Online Compiler C

#include <stdio.h> int main() { int a,n; int arr[10]={0}; scanf("%d",&a); while(a>0) { n=a%10; if(arr[n]==1) a=0; else arr[n]=1; a=a/10; } if(a==0) printf("YES"); else printf("NO"); return 0; }
这段代码试图判断一个整数中是否有重复的数字。它的思路是:用数组记录每个数字是否出现过,如果遇到重复数字就跳出循环,最后根据a的值输出YES或NO。

代码存在一个逻辑错误。当发现重复数字时,你把a设为0,但紧接着循环条件检查a>0,此时a=0,循环结束。然后你检查a==0,输出YES。但这里a==0有两种可能:一是正常处理完所有数字(没有重复),二是发现重复后被你强行设为0。所以程序无法区分这两种情况,导致结果错误。

- 提示1:思考一下,当发现重复数字时,除了将a设为0,还需要一个额外的标志来记录“有重复”这个状态,而不是依赖a的值。
- 提示2:循环结束后,判断的依据应该是这个标志,而不是a本身。你可以考虑用一个变量(比如flag)来标记是否发现重复。