原题链接:数据结构-集合union
解题思路:
①:输入两个集合LA,LB
②:求它们的并集
1):遍历LB中的所有元素,看是否存在于LA中
2):若存在则把该元素插入到LA的末尾,并输出LA,换行
3):若不存在,则也输出LA,换行
③:一组数据结束后,换行
注意事项:
1)根据上面求并集过程,LA的输出次数与LB的元素个数有关
即:LB中有n个元素,求并集过程时LA得输出n次,若n=0则不输出
2)题目要求输入集合后,要输出该集合,若集合长度为0,也不输出
3)每次输出占一行
4)每组数据输出完后,空一行
如:LA :1 1
LB:0
①先输出LA元素1换行;②LB没有元素,不输出;③又因为LB长度为0,所以之后的LA输出次数为0;④最后换行
LA:0
LB:0
①:首先,LA没有元素,不输出;②然后LB没有元素,不输出;③又因为LB长度为0,所以之后的LA输出次数为0;④最后换行
LA:0
LB:1 1
①首先,LA没有元素,不输出;②然后输出LB元素1换行;③LB长度为1输出一次LA换行,④最后换行
参考代码:
#include<stdio.h> #include<malloc.h> typedef struct Union_{ int *elem; int length; int size_; }*Union,UNION; void creat_union(Union L); void combin_(Union LA,Union LB); void out_put(Union L); int main() { UNION LA,LB; while(scanf("%d",&LA.size_)!=EOF) { creat_union(&LA); /*输入LB的长度*/ scanf("%d",&LB.size_); creat_union(&LB); /*合并两个集合*/ if(LA.size_!=0||LB.size_!=0) combin_(&LA,&LB); /*每组数据输出后用一行隔开*/ printf("\n"); } return 0; } /*------------------------------------------------*/ void creat_union(Union L) { L->elem=(int *)malloc(L->size_*sizeof(int)); L->length=0; for(int i=0;i<L->size_;i++) {scanf("%d",&L->elem[i]);L->length++;} /*长度不是0时才输出*/ if(L->length!=0) out_put(L); } /*------------------------------------------------*/ void combin_(Union LA,Union LB) { int j; /*为了避免每次插入都要分配,导致分配次数过多,所以直接给LA->elem[],重分配空间大小为 LA->length+LB->length,但这种分配可能会造成空间浪费,还有一种方法是把要插入的元素个数求出来,再分配 但浪费时间*/ if(LA->length+LB->length>LA->size_) LA->elem=(int *)realloc(LA->elem,(LA->length+LB->length)*sizeof(int)); for(int i=0;i<LB->length;i++) { /*判断LB中下标为i的元素在LA中是否存在*/ for(j=0;j<LA->length;j++) { if(LA->elem[j]==LB->elem[i]) break; } /*若果不存在则把LB->elem[i]插入到LA末尾,再插入之前,先重分配空间*/ if(j==LA->length) { LA->elem[LA->length++]=LB->elem[i]; } out_put(LA); } } /*------------------------------------------------*/ void out_put(Union L) { /*除最后一个元素外,其余元素输出后都有空格*/ for(int i=0;i<L->length-1;i++) printf("%d ",L->elem[i]); /*输出最后一个元素*/ printf("%d\n",L->elem[L->length-1]); }
别忘点赞哦-.-!
0.0分
15 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复