1. 程式人生 > >集合 (set的練習)

集合 (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;
}