解题思路:
先讲数组排序,再删除重复内容,没有算法基础的人也可以搞定
注意事项:
注意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 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复