7-4 找出不是兩個數組共有的元素 ( 20 分 )
給定兩個整型數組,本題要求找出不是兩者共有的元素。
輸入格式:
輸入分別在兩行中給出兩個整型數組,每行先給出正整數N(≤20),隨后是N個整數,其間以空格分隔。
輸出格式:
在一行中按照數字給出的順序輸出不是兩數組共有的元素,數字間以空格分隔,但行末不得有多余的空格。題目保證至少存在一個這樣的數字。同一數字不重復輸出。
輸入樣例:
10 3 -5 2 8 0 3 5 -15 9 100
11 6 4 8 2 6 -5 9 0 100 8 1
輸出樣例:
3 5 -15 6 4 1
思路:作為C++中STL的練習記錄一下吧,剛開始看到輸出沒有排序,所有用了unordered_set,但是發現這個容器說無序還真的是無序!但不是按照輸入順序來所有還是需要借助數組來保存輸入序列。
還有就是好像集合並交叉那些似乎都不太實用,性價比最高還是find();
#include<iostream> #include<cstdio> #include<vector> #include<string> #include<unordered_set> #include<algorithm> using namespace std; int main() { unordered_set<int>se1, se2; int a[30], b[30]; int n1, n2, num; cin >> n1; for (int i = 0; i < n1; i++) { cin >> num; a[i] = num; se1.insert(num); } cin >> n2; for (int i = 0; i < n2; i++) { cin >> num; b[i] = num; se2.insert(num); } unordered_set<int>::iterator iter; int flag = 1; for (int i = 0; i < n1;i++){ if (se2.find(a[i]) != se2.end()) continue; if (flag == 1){ cout << a[i]; flag = 0; } else cout << " " << a[i]; se2.insert(a[i]); } for (int i = 0; i < n2;i++){ if (se1.find(b[i]) != se1.end()) continue; if (flag == 1){ cout << b[i]; flag = 0; } else cout << " " << b[i]; se1.insert(b[i]); } if (flag != 1)cout << endl; return 0; }