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

#include <stdio.h> int main() { int a[10]; 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]) { printf("%d ", a[i]); break; } } } return 0; }
这段代码的功能是:读取10个整数存入数组,然后找出并打印所有重复出现的数字(每个重复数字只打印一次,但如果有多个不同的重复数字,会按首次出现顺序打印)。

代码存在一个逻辑问题:当找到重复数字时,内层循环用 `break` 跳出,但外层循环继续执行,这可能导致同一个重复数字被多次打印(例如数字3出现在位置0、3、7,第一次匹配时打印3,但后续位置3和7还会再次匹配并打印)。

- 提示1:考虑如何标记已经打印过的数字,避免重复输出。例如,可以在打印后修改数组元素的值,或者使用一个额外的标志数组。
- 提示2:注意 `break` 只跳出内层循环,外层循环会继续检查后面的元素。思考是否需要在找到重复后也跳过外层循环中该数字的后续检查。