Online Compiler 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 = 1; } } if (m == 1) { printf("%d ", a[i]); } } return 0; }
这段代码试图找出数组中的重复元素并打印出来。它的逻辑是:对于每个元素,检查它是否在数组中出现过至少一次(包括自身),如果出现过就打印。

但代码存在逻辑问题。当检查元素a[i]时,内层循环从j=0到9,一定会遇到j=i的情况,此时a[i]==a[j]必然成立,所以m总是被设为1,导致每个元素都会被打印一次,无法正确判断是否真正重复。

- 内层循环中,当j等于i时,a[i]与自身比较必然相等,这导致m始终为1。你需要避免元素与自身比较,或者换个思路来统计出现次数。
- 另外,当前逻辑会多次打印同一个重复元素(例如数组中有两个5,那么i=0和i=1时都会打印5)。你需要考虑如何让每个重复值只输出一次。