Online Compiler C

#include <stdio.h> int main() { int a[10]; int i, j, k; int is; int alr; for (i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (i = 0; i < 10; i++) { is = 0; for (j = 0; j < 10; j++) { if (i != j && a[i] == a[j]) { is = 1; break; } } if (!is) continue; alr = 0; for (k = 0; k < i; k++) { if (a[k] == a[i]) { alr = 1; break; } } if (!alr) { printf("%d ", a[i]); } } return 0; }
这段代码的功能是:从键盘输入10个整数,然后输出其中所有出现次数大于1的元素(即重复出现的数字),并且每个重复数字只输出一次。

代码的思路是:对于每个元素,先检查它是否在数组中有重复(通过内层循环j),如果有重复,再检查这个元素是否已经在之前被输出过(通过循环k),如果没有输出过,就打印它。

- 注意变量 `is` 的作用:它标记当前元素 `a[i]` 是否在数组中有另一个相同的值。如果 `is` 为0,说明这个元素只出现一次,直接跳过。
- 变量 `alr` 的作用:当确定 `a[i]` 是重复元素后,检查它是否已经在更早的位置被输出过,避免重复打印。

这段代码逻辑上可以工作,但效率不高,因为用了三重循环。你可以思考一下:如果数组中有多个相同的数字,比如三个5,代码会输出几次5?是否符合预期?