题目:
给你两个集合,要求{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
代码如下:
(1)使用set容器:
#include<stdio.h>
#include<set>
#include<iostream>
using namespace std;
int n,m;
int a[10001],b[10001];
struct cmp //把set容器中的元素进行由小到大排序;
{
bool operator()(const int &a,const int &b)
{
if(a!=b)
return a<b;
else
return a>b;
}
};
int main()
{
while(~scanf("%d%d",&n,&m))
{
int i;
set<int,cmp> s; //定义元素类型为int型的集合对象s,
//采用的比较函数是cmp;
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
s.insert(a[i]);
}
for(i=0;i<m;i++)
{
scanf("%d",&b[i]);
s.insert(b[i]);
}
set<int,cmp>::iterator it; //定义前向迭代器;
it=s.begin();
cout<<*it;
it++;
for(;it!=s.end();it++)
{
cout<<" "<<*it;
}
cout<<endl;
}
return 0;
}
(2)使用数组:
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n,m;
int a[20010];
int main()
{
while(~scanf("%d%d",&n,&m))
{
int i;
for(i=0;i<n;i++) //把第一个数组的元素存入数组;
{
scanf("%d",&a[i]);
}
for(i=n;i<n+m;i++) //把第二个数组的元素存入数组;
{
scanf("%d",&a[i]);
}
sort(a,a+n+m); //使用sort快排进行排序;
printf("%d",a[0]);
for(i=1;i<n+m;i++)
{
if(a[i]!=a[i-1]) //把不重复的元素按顺序输出,注意格式控制;
printf(" %d",a[i]);
}
printf("\n");
}
return 0;
}
人生第一篇博客,记录一下,撒花。。。。。