Online Compiler 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] && i != j) printf("%d ", a[i]); } } return 0; }
这段代码的功能是:读入10个整数,然后输出所有重复出现的数字(每个重复数字会输出多次)。

代码的问题在于输出逻辑:当发现两个位置上的数字相等且不是同一个位置时,就会输出一次。这会导致:
- 每个重复的数字会被输出多次(例如数字3在位置2和5重复,那么当i=2,j=5和i=5,j=2时会各输出一次)
- 如果某个数字出现三次以上,输出次数会更多

- 思考一下:你希望每个重复的数字只输出一次,而不是每次发现重复都输出。可以尝试用一个标记数组来记录哪些数字已经输出过。
- 另外注意内层循环的起始值:当前j从0开始,会导致每个重复对都被输出两次(i和j互换)。可以调整j的起始值来避免重复输出。