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

#include <stdio.h> int main() { int a[10]; int m = 0; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 10; i++) { m = 0; for (int j = 0; j < 10; j++) { if (a[i] == a[j]) { m ++; } } if (m > 1) { printf("%d ", a[i]); } } return 0; }
这段代码试图找出数组中重复出现的元素并打印出来。它使用了两层循环:外层循环遍历每个元素,内层循环统计该元素在整个数组中出现的次数。如果某个元素出现次数大于1,就打印它。

代码的主要问题是:当同一个数字出现多次时,它会被重复打印多次。例如,如果数字3出现了3次,那么程序会打印3次"3"。

- 内层循环的统计逻辑是正确的,但外层循环没有考虑已经处理过的重复元素。当外层循环遇到同一个数字的第二次出现时,它仍然会再次统计并打印。
- 可以考虑在打印前检查当前元素是否已经被处理过。例如,可以增加一个标记数组,或者在内层循环中只统计当前元素之前的部分,这样每个重复数字只会被打印一次。