解题思路:
    先讲数组排序,再删除重复内容,没有算法基础的人也可以搞定
注意事项:
    注意remove函数系统自带,所以要稍微改一下变量名,比如下面的代码我原本自定义函数名字就是remove()的,后来修改成了wowremove(),需要使用stdlib函数库,借助qsort函数进行快排序,再使用自定义函数进行删除。


int compare ( const void *a , const void *b )

{

  return *(int *)a - *(int *)b;  //升序排序

//return *(int *)b - *(int *)a; //降序排序

/*可见:参数列表是两个空指针,现在他要去指向你的数组元素。所以转型为你当前的类型,然后取值。

        升序排列时,若第一个参数指针指向的“值”大于第二个参数指针指向的“值”,则返回正;若第一个参数指针指向的“值”等于第二个参数指针指向的“值”,则返回零;若第一个参数指针指向的“值”小于第二个参数指针指向的“值”,则返回负。

        降序排列时,则刚好相反。

此函数用于qsort函数中的第四个参数。


参考代码:

#include<stdio.h>

#include<stdlib.h>

#define MAX 100

int cmp(const void *a, const void *b) 

     return(*(int *)a-*(int *)b);  //升序 

}

void wowremove(int *dat, int *len, int idx)

{

    (*len)--;

    for (int i = idx; i < *len; i++)

        dat[i] = dat[i+1];

}

int main()

{

int a[MAX],number,i,j;

scanf("%d",&number);

for(i=0;i<number;i++)

scanf("%d",&a[i]);

qsort(a,number,sizeof(int),cmp);

for(i=0;i<number-1;i++)

if(a[i]==a[i+1])

{

wowremove(a,&number,i+1);

i--;

}

printf("%d\n",number);

for(i=0;i<number;i++)

printf("%d ",a[i]);

return 0; 

}


点赞(0)
 

0.0分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论