在线编译器 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++) { count=0; 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个整数中找出重复出现的元素,并尝试将它们存入一个结果数组。但代码中存在逻辑错误,导致无法正确输出重复元素。

主要问题在于:
- 内层循环中检查重复的逻辑不完整,且变量 `exist` 的判断条件有误,导致结果数组 `res` 可能没有被正确填充。
- 最后打印时使用 `count` 作为循环上限,但 `count` 在循环结束后是最后一个元素重复的次数,而不是结果数组的长度。

- 检查 `exist` 变量的使用:你试图用 `exist` 判断当前元素是否已经处理过,但条件 `if(arr[k]==arr[i])` 实际上是在找与当前元素相同的值,而不是判断是否已存入结果。这会导致逻辑混乱。
- 注意 `res[count]=arr[i];` 这一行:你使用 `count` 作为下标,但 `count` 是当前元素的重复次数,不是结果数组的索引。结果数组的索引应该独立递增。