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
题意:求A集合和B集合的并集,并按照顺序输出。
分析:
(1)输入的时候把A,B放入同一个数组中,排序后,输出注意相同的不输出即可。
int sum=n+m;
for(int i=0;i<sum;i++)
scanf("%d",&a[i]);
sort(a,a+sum);
cout<<a[0];
for(int i=1;i<sum;i++)
if(a[i]!=a[i-1])
cout<<" "<<a[i];
cout<<endl;
(2)使用STL——<set>
<set>有求并集的功能,而且还有插入不重复且自动按从小到大排序。
代码:
#include <iostream>
#include <cstdio>
#include <set>
using namespace std;
set<int>union_set;
set<int>::iterator it;
int main()
{
int n,m,tt;
while(~scanf("%d%d",&n,&m))
{
union_set.clear();
for(int i=0;i<n+m;i++)
{
cin>>tt;
union_set.insert(tt);
}
int flag=0;
for(it= union_set.begin();it!=union_set.end();it++)
{
if(flag)
cout<<" ";
flag=1;
cout<<*it;
}
cout<<endl;
}
return 0;
}
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
#define N 20005
int a[N];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
int sum=n+m;
for(int i=0;i<sum;i++)
scanf("%d",&a[i]);
sort(a,a+sum);
cout<<a[0];
for(int i=1;i<sum;i++)
if(a[i]!=a[i-1])
cout<<" "<<a[i];
cout<<endl;
}
return 0;
}