Online Compiler C

#include <stdio.h> int main() { int N,num; scanf("%d",&N); int a[10]={0}; while(N>0) { num=N%10; a[num]++; N/10; } int lot=0; while(a[lot]<10) { if(a[lot]>=2) printf("YES"); return 0; } printf("NO"); return 0; }
这段代码的目的是判断输入的数字中是否有重复出现的数字。代码从标准输入读取一个整数N,然后统计每个数字(0-9)出现的次数,最后判断是否有数字出现两次或以上。

代码中存在几个问题:

- 在第一个while循环中,`N/10;` 这一行没有将结果赋值回N,导致循环无法正确更新N的值,会变成死循环。

- 第二个while循环的条件 `a[lot] < 10` 逻辑不对,而且循环内部一旦遇到 `a[lot] >= 2` 就输出YES并立即返回,但循环没有正确遍历所有数字。

- 如果第一个数字就出现重复,程序会输出YES并结束,但后续数字不再检查,且循环条件可能导致提前退出。

- 输出格式上,如果找到重复数字应输出YES,否则输出NO,但当前逻辑可能输出多次或漏掉情况。你的代码试图判断输入整数中是否有重复的数字,但存在几个关键问题。

第一个while循环中,`N/10;` 这一行没有将结果赋值给N,所以N的值永远不会改变,循环会无限执行下去。你需要将N除以10的结果存回N。

第二个while循环的条件 `a[lot] < 10` 并不合理,它会导致循环在lot为0时可能直接退出,而且循环内部一旦发现重复就立即返回,但没有遍历所有数字。你应该用for循环遍历数组a的每个元素,检查是否有计数大于等于2。

- 检查第一个while循环中,是否忘记将 `N/10` 的结果赋值给N。
- 检查第二个循环的逻辑,是否应该用for循环遍历0到9,而不是用while加一个不恰当的条件。