Online Compiler C

#include <stdio.h> int main() { int a[10]; int b[10]; int r = 0; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); } for (int i = 0; i < 10; i++) { int c = 0; for (int j = 0; j < r; j++) { c = 1; break; } } for (int i = 0; i < 10; i++) { for (int j = i + 1; j < 10; j++) { if (a[i] == a[j]) { printf("%d ", a[i]); b[r] = a[i]; r++; break; } } } return 0; }
这段代码的目的是找出数组 `a` 中重复出现的元素,并存入数组 `b` 中。但代码中存在逻辑问题,导致无法正确去重。

- 第二个循环(`for (int i = 0; i < 10; i++)` 内部嵌套的 `for (int j = 0; j < r; j++)`)实际上没有做任何有效操作,因为 `c` 被赋值为1后立即 `break`,而且 `c` 之后没有被使用。这个循环可以删除,它不影响结果,但也没有帮助去重。

- 主要问题在于:当找到重复元素时,你直接将其存入 `b` 并打印,但没有检查这个重复元素是否已经被记录过。例如,如果 `a` 中有三个相同的数字,你的代码会输出两次这个数字(第一次发现重复时记录,第二次发现另一个重复时再次记录)。你需要确保每个重复元素只被记录一次。

- 提示:在将 `a[i]` 存入 `b` 之前,可以先检查 `b` 数组中是否已经存在相同的值。或者,你可以考虑先对数组排序,然后只比较相邻元素,这样更容易避免重复记录。