集合 (set的练习)

题目描述:

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

输入描述:

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

输出描述:

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

输入样例:

3 3
1 3 5
2 4 6

输出样例:

1 2 3 4 5 6

解题思路:

额,首先我以为这是一道水题,然后直接用数组求解再sort排序一提交代码hhhhhh惊呆了,只通过了10%的case。是我太小瞧这道网易校招题了,把数组换成set来求解好吧。需要注意的是输出的时候,在for-each循环中不能直接用it==s.begin()来判断是不是第一个元素,编译器会报错,这里我用了一个bool型的变量isVirgin来标记是不是第一次(滑稽.jpg 我就是要给它起这个名)。

AC代码:

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int m,n;
    while(cin >> m >> n)
    {
        set<int> s;
        int temp;
        for (int i = 0; i < n+m; i++)
        {
            cin >> temp;
            s.insert(temp);
        }
        bool isVirgin = true;  //判断是不是第一次
        for(auto it : s)
        {
            if(isVirgin)
            {
                cout << it;
                isVirgin = false;
            }
            else
            {
                cout << " " << it;
            }
        }
        cout << endl;
    }
    return 0;
}

 

猜你喜欢

转载自blog.csdn.net/weixin_42449444/article/details/85343561
今日推荐