Онлайн компилятор 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 = 0; j < 10; j++) { if(a[i]!=a[j]) printf("%d",a[i]); } } return 0; }
这段代码的作用是:先读入10个整数存入数组,然后对每个元素,检查它是否与数组中所有其他元素都不相等,如果某个元素与某个其他元素不相等,就打印它。

代码存在逻辑错误。当前的双层循环会导致每个元素被多次打印,而且条件判断的逻辑不符合“找出只出现一次的元素”的常见需求。

- 内层循环中,只要发现a[i]和a[j]不相等就立即打印,这会导致同一个a[i]被打印多次(每次遇到不同的a[j]都会打印一次)。实际上,你应该先判断a[i]是否与所有其他元素都不相等,然后再决定是否打印。
- 另外,当i和j相等时,a[i]和a[j]是同一个元素,此时条件a[i]!=a[j]为假,不会打印,但这不是问题所在。主要问题在于判断“是否唯一”的逻辑需要先完成全部比较,而不是每次发现不等就输出。