题目描述
给你两个集合,要求{A} + {B}。
注:同一个集合中不会有两个相同的元素。
输入描述
每组输入数据分为三行,第一行有两个数字n,m(0<n,m<=10000),分别表示集合A和集合B的元素个数。后两行分别表示集合A和集合B。每个元素为不超出int范围的整数,每个元素之间有一个空格隔开。
输出描述
针对每组数据输出一行数据,表示合并后的集合,要求从小到大输出,每个元素之间有一个空格隔开。
输入样例
1 2
1
2 3
1 2
1
1 2
输出样例
1 2 3
1 2
我也是一个小白,现在是在参加ACM的集训,希望一天了也没AC几道题,代码刚开是我也不太明白,但是学长给讲了点就有的地方就明白点了,希望这些对大家有帮助!代码有参考其他人的,但是找不到是谁了~~~~见谅
#include<stdio.h>
#include<set>
using namespace std;
int main()
{
int i,n,m,j,l;
while(scanf("%d %d",&n,&m)!=EOF)
{
set<int>s; //首先创建一个集合,他会自动排序并且没有重复的元素
for(i=1;i<=n;i++)
{
scanf("%d",&j);
s.insert(j); //把我们输入的数据存入这个集合中
}
for(i=1;i<=m;i++)
{
scanf("%d",&l);
s.insert(l); //因为数据分别是两行所以存两次
}
set<int>::iterator it; //这里是来两个迭代器,分别对应我们的两组数据 it和it1
set<int>::iterator it1; //是它们的名字,
it1=s.end(); // se.end () 返回指向最后一个元素之后的迭代器,不是
it1--; //最后一个元素
for(it=s.begin();it!=it1;it++)
{
printf("%d ",*it);
}
printf("%d\n",*it); //这里的两个输出是为了让格式正确,去除最后一个输出后
} //面的空格
return 0;
}