Онлайн компилятор C

#include <stdio.h> enum{size=10}; int main() { int a[size]; for(int i=0;i<size;i++){ scanf("%d",&a[i]); }int num=0,b[10]; while(num<size){ for(int i=0;i<size;i++){ if(a[num]==a[i]){ b[num]++; } }num++; } for(int i=0;i<size;i++){ if(b[i]>=2){ printf("%d ",b[i]); } } return 0; }
这段代码的目的是统计数组中每个数字出现的次数,然后输出出现次数大于等于2的数字的出现次数。但代码存在逻辑问题。

代码首先读入10个整数存入数组a,然后对每个a[num],遍历整个数组a,统计它出现的次数,存入b[num]。最后输出b中大于等于2的值。

问题在于:对于重复的数字,每个位置都会统计一次,导致输出重复的统计结果。例如,如果数字5出现了3次,那么b数组中对应这3个位置的值都是3,最终会输出三个3,而不是只输出一个3。

- 代码没有区分不同数字,而是对每个位置单独统计,导致重复数字被多次输出。
- 可以考虑在统计时,只对每个不同的数字统计一次,或者输出前检查是否已经输出过该数字的统计结果。