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[m]++; } } } 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`,用 `a[i]` 的值作为索引去累加 `b` 中对应位置,但这里逻辑不对。

- 你使用 `m==a[i]` 来比较循环变量和数组元素值,这实际上是在检查索引 `m` 是否等于 `a[i]` 的值,而不是在统计元素出现的次数。你应该直接使用 `a[i]` 作为 `b` 的索引,比如 `b[a[i]]++`,但要注意数组元素的值可能超出 `b` 的范围。
- 另外,`main` 函数中只读取了两个整数(`x` 和 `a[0]`),但 `x` 被当作数组大小传入函数,而数组 `a` 的其他元素未初始化,这会导致未定义行为。你需要先读取数组大小,再循环读取所有数组元素。