Online Compiler C

#include <stdio.h> int is_two_same(int size, int a[]){ int b[size]={0}; for(int i=0;i<size;i++){ for(int m=0;m<size;m++){ if(m==a[i]){ b[i]++; } } } for(int i=0;i<size;i++){ if(b[i]>1){ return 0; } }return 1; } int main() { int x,a[100],answer=0; scanf("%d%d",&x,&a[0]); answer=is_two_same(x,a); return 0; }
这段代码试图检查数组中是否有重复元素,但实现逻辑有误。主要问题在于:

- 你创建了一个数组 `b` 来记录每个位置上的“某种计数”,但实际并没有正确统计每个数字出现的次数。
- 内层循环中,`m==a[i]` 是在比较索引 `m` 和数组元素 `a[i]` 的值,而不是比较数组元素之间是否相等。
- 主函数中只读取了两个整数,但题目可能要求读取 `x` 个整数到数组 `a` 中。

- 提示1:要判断是否有重复元素,应该比较数组中的元素两两是否相等,而不是用索引去和元素值比较。想一想如何用两个循环遍历所有元素对。
- 提示2:主函数中需要根据 `x` 的值循环读取 `x` 个整数存入数组,目前只读取了两个数,这样数组大部分元素是未初始化的。