集合 (set的練習)
阿新 • • 發佈:2019-01-10
題目描述:
給你兩個集合,要求{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; }