找出数组中重复元素,用c语言来写

找出数组中重复的元素,并求出重复元素个数
c语言代码咋写
在二维数组或者多维数组中查找的时候跟一维是不是差不多啊
我菜鸟

2个回答

这题解题思路很多。最容易想到的,是从第一个元素起,逐一和后面所有元素进行比较。比较完毕后,得到这个元素是否重复,重复次数。
接着从第二个元素与后面的所有元素对比,找出重复的,及重复次数。所以需要有变量记录重复的次数,元素序号。
但是要注意,假设第1,3,5元素重复了,当从第三元素向后编辑的时候,会发现3,5元素重复,但只重复了两次。而从第一元素比较的时候,重复了3次。
也就是说要剔除掉重复的元素后再进行新一轮的对比。有些复杂。

还有一种思路,先预备着很多框,然后遍历数组,每得到一个元素,就对比所预备的框里装的数据是否和这个元素值相同。相同的就丢到这个框里,都不同就把这个元素丢到一个新框里曲。然后继续遍历下一个数组元素。直到所有元素遍历完毕后,查看框的情况。
所以这个思路就需要设计框的数据结构。

手动打码如下,没有运行检测:


const int max_array_size=100; //数组元素个事。按照一维数组定义。

//单个的框子数据结构。
struct Kuang {
   int value;   //值,保存的是数组元素的值。
     int val_numbs;  //具有这个值的元素个数。
     int idx[  MAX_NUMBERS ];  //数组的哪些元素序号有这个值。
};

struct Kuang ks[max_array_size];  //与数组元素一样多的框子。因为有可能没有重复的元素,所以框子必须足够。
int kuang_numbres=0  //放了元素进去的框子有几个?现在没有框子里有元素值,所以是0.

int array[max_array_size] ={1,2,3,5,2,3,7,9,1,…… };

//遍历一次整个数组即可
for(int i=0;i<max_array_size;i++){
   int element_value=array[i];  //数组元素值,i是数组序号idx
     //每一个数组元素值,都需要遍历一次框子数组,好一一对比每一个框子。
     for(int j=0;j<kuang_numbres;j++{
        if( element_value==ks[j].value ) {  //数组元素值与框子里的值是否一样?
               ks[j].val_numbs++;   //找到一个框子存的值和数组元素值一样了,修改框子里的信息。
                 ks[j].idx[ ks[j].val_numbs-1 ]=i;   //记录下序号。
                 continue;  //找到了就不再继续遍历剩下的框子了,重新遍历下一个数组元素。
            }   
    } //遍历完框子了,如果数组元素值与框子里保存的值有相同的,在上面代码里已经处理完毕了。下面处理的是元素值与框子里的值都不一样,要创建新框子的代码。           
            if( j == kuang_numbres ) {  //如果数组元素值在框子里没有找到
              kuang_numbres++;  //使用上一个新的框子。
                ks[kuang_numbres-1].value=element_value;  //记录下框子里的信息。
                ks[kuang_numbres-1].val_numbs=1;
                ks[kuang_numbres-1].idx[0]=i;
            }    
}

//打印重复的数组元素信息。
for(int k=0;k<kuang_numbres;k++){
  if( ks[k].val_numbs>1) {
      printf("数组元素值%d,重复了%d次,重复的数组序号是:", ks[k]. value, ks[k].val_numbs);
        for(int l=0;l<ks[k].val_numbs;l++){
          printf(" %d",ks[k].idx[l] );
        }

    }
}
aqwca
aqwca 谢了兄弟
5 个月之前 回复

思路,先排序,然后遍历一次,如果和相邻的元素相等,就是重复。

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问