Online Compiler 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] = {0}; 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++) { for(int times=0;times<size;times++){ if (b[i] >= 2&&b[i]==b[times]&&times!=i) { printf("%d ", a[i]);} } } return 0; }
这段代码的目的是找出数组中重复出现至少两次的元素并输出。它先读入10个整数,然后统计每个元素出现的次数,最后尝试输出重复元素。

代码中存在逻辑问题,导致输出结果可能不正确或重复输出。

- 在统计次数的循环中,你使用 `b[num]` 来记录 `a[num]` 出现的次数,但每次内层循环都会从头遍历整个数组,这会导致每个元素都被重复统计,而且 `b[num]` 的值实际上是 `a[num]` 在整个数组中出现的总次数,而不是只针对当前元素。
- 在输出部分,你试图通过比较 `b[i]` 和 `b[times]` 来找出重复元素,但这种方法不能正确判断哪些元素是重复的,因为 `b[i]` 只是次数,不同元素可能有相同次数,而且你还会因为 `times!=i` 的条件而输出多次同一个元素。