Online Compiler C

#include <stdio.h> int is_two_same(int size, int a[]){ int b[size]={0}; int m=0; for(int i=0;i<size;i++){ for(int n=0;n<size;n++){ if(a[i]==n){ b[n]++; } } } for(int i=0;i<n;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,对于每个元素a[i],如果它等于某个索引n,就让b[n]加1。最后检查b中是否有大于1的值,如果有就返回0(表示有重复),否则返回1。

- 问题1:内层循环中 `if(a[i]==n)` 这个条件有问题。n是索引值(0,1,2...),而a[i]是数组元素的值,两者一般不相等。你应该直接使用a[i]作为b的索引,即 `b[a[i]]++`,但要注意a[i]的值不能超过数组b的大小。
- 问题2:第二个循环中 `for(int i=0;i<n;i++)` 这里的n是之前循环的局部变量,在循环外不可用,会导致编译错误。应该用size作为循环上限。