在线编译器 C

#include <stdio.h> int main() { int a[10]; int n=11111111; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 10; i++) { for (int j = i+1; j <10; j++) { if (a[i] == a[j] && i != j&&i!=n) { printf("%d ", a[i]); n=j; } } } return 0; }
这段代码试图找出数组中重复出现的数字并打印出来。它使用了两层循环来比较每一对元素,当发现两个位置的值相等时,就打印这个值。变量 `n` 被用来记录上一次打印重复数字时的位置 `j`,试图避免重复打印同一个数字。

代码的主要问题是逻辑不完整,导致输出结果可能不正确或重复。

- 变量 `n` 的初始值 `11111111` 是一个很大的数,但数组索引范围是 0 到 9,所以 `i != n` 这个条件几乎总是成立,无法有效防止重复打印。你需要思考如何标记已经处理过的重复数字,而不是用一个固定的数值。
- 当发现重复数字时,你只打印了 `a[i]`,但没有处理后续可能出现的更多相同数字。例如,如果数组中有三个相同的数字,你的代码可能会多次打印同一个值。你需要考虑如何确保每个重复的数字只被打印一次。