C语言中数组去重

发布时间:2024年01月22日
/*---------------------------------------------------------
【程序设计】以下程序的功能是删去一维数组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++ ,否则直接跳过

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
以此类推,我们就能成功把数组去重了

?

文章来源:https://blog.csdn.net/lzcandhyandcg/article/details/135740917
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。