Online Compiler C

#include <stdio.h> int main() { int a[10]; int n=0; 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` 的值,但 `i != n` 这个条件并不能有效避免重复打印。实际上,当内层循环发现重复时,外层循环后续的 `i` 可能仍然会再次触发打印,导致同一个数字被输出多次。

- 你希望每个重复数字只打印一次,但目前的逻辑没有正确标记哪些数字已经被处理过。可以考虑用一个额外的数组或标志来记录已经打印过的数字,而不是依赖 `n` 这个变量。