C语言中数组去重

/*---------------------------------------------------------
【程序设计】以下程序的功能是删去一维数组s中相同的数据在一起出现的数,使之只剩一个。数组中
      的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。
例:若一维数组中的数据是:
2 3 3 3 3 4 4 4 4 4 10 10 10 10 13 13 15 15 18 18
结果是:2 3 4 10 13 15 18
------------------------------------------------------------------------
注意:部分源程序给出如下。请勿改动主函数main或其它函数中给出的内容,仅在
      Program-End之间填入若干语句。不要删除标志否则不得分。
---------------------------------------------------------*/
#include <stdio.h>
int del(int s[],int n)
{
    int i,j=1;
/*********Program*********/
   


/*********  End  *********/

}

int main()
{
    int s[]={2,3,3,3,3,4,4,4,4,4,10,10,10,10,13,13,15,15,18,18};
    int i,m,n=sizeof(s)/sizeof(int);
    for(i=0;i<n;i++)
        printf("%d ",s[i]);
    m=del(s,n);
    printf("\n");
    for(i=0;i<m;i++)
        printf("%d ",s[i]);
    printf("\n");
    return 1;
}


在这个题目中,可以看到数组已经按从小到大排好序了,所以我们在这个外部函数中只用去重就可以了

 我们可以用 i 这个变量来遍历这个数组中的每一个数

在 i 遍历的同时,我们可以给 i 的内部加一些条件,使 i 在遍历的同时可以找出与前一个数相同的数

 for(i=1;i<n;i++) {
        if (s[j - 1] != s[i])
            s[j++] = s[i];
    }
    return j;

在这个 if 语句中,可以知道当 s[0] != s[1] 时就把值放入数组s中,然后 j++ ,否则直接跳过

需要注意的是,if 里面的条件不能是 j-- 或者 --j 不然会改变 j 的值,导致运行错误

s[0]!=s[1],成立2!=3s[0]=2
s[1]!=s[2],不成立跳过 
s[2]!=s[3],不成立跳过 
s[3]!=s[4],不成立跳过 
s[4]!=s[5],成立3!=4s[1]=3
以此类推,我们就能成功把数组去重了

 

如果觉得这篇文章对你有用的话,可以支持一下博主,b站搜索:夜临ね   即可搜索到我,本人现在制作火影视频,如果要打段位也可以私聊我

 04e3ab29e233467f91290cc7a22a9414.jpg

 

 

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值