在线编译器 C

#include<stdio.h> int main() { int arr[10]; int res[10]; int i,j,k; int count=0; for(i=0;i<10;i++) { scanf("%d",&arr[i]); } for(i=0;i<10;i++) { for(j=0;j<10;j++) { if(arr[j]==arr[i]) { count++; } } if(count>1) { int exist=0; for(k=0;k<10;k++) { if(arr[k]==arr[i]){ exist=1; break; } } if(exist==0) { res[count]=arr[i]; } } } for(i=0;i<count;i++) { printf("%d ",res[i]); } return 0; }
这段代码的目的是从输入的10个整数中找出重复出现的元素并输出。但代码中存在逻辑错误,导致无法正确实现功能。

主要问题在于:
- 内层循环中,`count` 变量没有在每次外层循环开始时重置,导致计数累加错误。
- 判断重复元素后,将元素存入 `res` 数组的逻辑有误,`res[count]` 使用了错误的索引,且 `exist` 变量的检查条件与预期不符。
- 最后输出时,循环次数 `count` 已经不是原始计数,导致输出结果混乱。

- 注意 `count` 变量需要在每次检查新元素时重新从0开始计数,否则会不断累加。
- 存储重复元素时,应该使用一个独立的索引变量来记录 `res` 数组的当前位置,而不是用 `count`。