aqwca
aqwca
采纳率50%
2019-11-20 23:15 阅读 1.4k

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

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

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

2条回答 默认 最新

  • 已采纳
    w8u 辉歌 2019-11-21 14:35

    这题解题思路很多。最容易想到的,是从第一个元素起,逐一和后面所有元素进行比较。比较完毕后,得到这个元素是否重复,重复次数。
    接着从第二个元素与后面的所有元素对比,找出重复的,及重复次数。所以需要有变量记录重复的次数,元素序号。
    但是要注意,假设第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] );
            }
    
        }
    }
    
    点赞 评论 复制链接分享
  • caozhy 从今以后生命中的每一秒都属于我爱的人 2019-11-21 09:04

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

    点赞 评论 复制链接分享

相关推荐