HDOj-1412

{A} + {B}

Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 17014    Accepted Submission(s): 7110


Problem Description
给你两个集合,要求{A} + {B}.
注:同一个集合中不会有两个相同的元素.

 

Input
每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数.后两行分别表示集合A和集合B.每个元素为不超出int范围的整数,每个元素之间有一个空格隔开.

 

Output
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开.

 

Sample Input
1 2
1
2 3
1 2
1
1 2
 
Sample Output
1 2 3
1 2
 
两集合相加排序后输出的问题,比较水的一道题,注意集合内没有相同的元素这一点。
附自AC代码:
 1 #include<iostream>
 2 #include<algorithm>//包含了排序函数sort 
 3 #include<cstdio>
 4 using namespace std;
 5 int main(){
 6     int n,m;
 7     while(~scanf("%d %d",&n,&m)&&n&&m){
 8         int i,a[20010];
 9         for(i=0;i<n+m;i++){//直接将两个集合全部输入a数组中 
10             scanf("%d",&a[i]);
11         }
12         sort(a,a+m+n);//对a数组进行排序 
13         printf("%d",a[0]);//首先输出a[0],避免与之后的判断语句冲突 
14         for(i=1;i<n+m;i++){
15             if(a[i-1]==a[i])//当数组内存在相等元素时,跳过其他相等元素只输出最后一个 
16             continue;
17             else
18             printf(" %d",a[i]);
19         }
20         printf("\n");//不要忘记最后的\n; 
21     }
22     return 0;
23 } 

P.S:

写这题的时候突然想系统的巩固一下几大排序算法(总不能老用sort()。。),这几天重点学习一下,争取近几日开一个排序专栏!

posted @ 2016-05-05 21:29  Kiven#5197  阅读(199)  评论(0编辑  收藏  举报