
京东真题
#include<iostream>
#include<set>
using namespace std;
int main()
{
//限制输入测试数据只有5组
for (int i = 0; i < 5; i++)
{
set<int> s_sum;
int n, m;
while (cin>>n>>m)
{
//循环输入多次,每次都清空集合
s_sum.clear();
for (int i = 0; i < n; i++)
{
int a;
cin >> a;
s_sum.insert(a);
}
for (int j = 0; j < m; j++)
{
int b;
cin >> b;
s_sum.insert(b);
}
//输出这一组数据的集合结果
for (int s:s_sum)
{
cout << s << " ";
}
cout << endl;
}
}
return 0;
}
- 若要按照题意,在输入的时候用两个集合A和B接收数据,然后再求{A}+{B},可以这样做:可以设计一个模板函数来表示集合相加。在输出那里,如果要严格考虑每一行最后没有空格而是直接换行,那么也可以完善。
#include<iostream>
#include<set>
using namespace std;
//合并两个集合
template <typename T>
void setAdd(set<T> &a, set<T> &b, set<T> &sum)
{
for (auto i:a)
{
sum.insert(i);
}
for (auto j : b)
{
sum.insert(j);
}
}
int main()
{
for (int i = 0; i<5; i++)
{
int a, b;
while (cin >> a >> b)
{
set<int> s_a, s_b, s_sum;
for (int j = 0; j<a; j++)
{
int av;
cin >> av;
s_a.insert(av);
}
for (int k = 0; k < b; k++)
{
int bv;
cin >> bv;
s_b.insert(bv);
}
setAdd(s_a, s_b, s_sum);
//int end = *(s_sum.end()); //end()是指向set容器的末尾(空),
//而不是指向最后一个元素。这样写会报*NULL的解除引用出错
//cout << "sum集合最后一个元素为:"<<end << endl; //没法得到最后一个元素
int i = 0, size = s_sum.size();
for (auto s:s_sum)
{
cout << s;
i++;
if (i != size)
{
cout << " ";
}
else
{
cout << endl;
}
}
}
}
return 0;
}
网友评论