Online Compiler C

#include <stdio.h> int main(){ const int N=10; int A[N],B[N]; int i,j,b=0; for(i=0;i<N;i++){ scanf("%d",&A[i]); } for(i=0;i<N;i++){ int c=0; for(j=0;j<N;j++){ if (A[i]==A[j]) c++; } if (c!=1){ B[b]=A[i]; b++;} } for (i=0;i<b;i++){ printf("%d ",B[i]); } return 0; }
这段代码的功能是:从输入中读取10个整数,然后找出其中所有出现次数大于1的元素(即重复元素),并将这些重复元素按首次出现的顺序输出。

代码的基本思路是:对于数组A中的每个元素,统计它在整个数组中出现的次数,如果次数不等于1(即重复出现),就把它存入数组B中。

代码存在一个逻辑问题:当某个元素重复出现时,它会被多次存入数组B。例如,如果数字3出现了3次,那么每次遇到3时,它都会因为计数大于1而被再次存入B,导致B中会有3个3。

- 提示1:你需要在将元素存入B之前,检查这个元素是否已经被记录过了。可以考虑在存入前先遍历B,看看这个值是否已经存在。
- 提示2:另一种思路是,先统计每个数字出现的次数,然后再遍历一次,只把出现次数大于1且尚未被记录的数字加入B。