Description 給定兩個集合A和B的所有元素,計算它們的交、並、差集。 Input 輸入數據有多組,第一行為數據的組數T,接下來有2T行,每組數據占2行,每行有若幹個整數,第一行的所有整數構成集合A,第二行的所有整數構成集合B,分別用空格分隔。A和B最多分別不超過100個元素。 Output ...
Description 給定兩個集合A和B的所有元素,計算它們的交、並、差集。 Input 輸入數據有多組,第一行為數據的組數T,接下來有2T行,每組數據占2行,每行有若幹個整數,第一行的所有整數構成集合A,第二行的所有整數構成集合B,分別用空格分隔。A和B最多分別不超過100個元素。 Output 輸出A、B的交、並、差集中的所有元素(以遞增順序)。每個集合占一行,數據元素之間用空格分隔。 Sample Input
1
0 1 2 3 4 5 6 7 8 8
3 6 8 9
Sample Output
3 6 8
0 1 2 3 4 5 6 7 8 9
0 1 2 4 5 7
#include<set> #include<algorithm> #include<iterator> #include<iostream> #include<sstream> using namespace std; int main() { set<int>v1,v2,v3; string s1,s2; int i,j,t,a; set<int>::iterator it; cin>>t; getchar(); while(t--) { j=0; getline(cin,s1); //數字類型的字元串導入s1 stringstream ss1(s1); //字元串s1再導入ss1流中 while(ss1>>a) //流中的字元串s1導入int a中變成數字 { v1.insert(a); //將a中暫時保存的數字轉入set } getline(cin,s2); stringstream ss2(s2); while(ss2>>a) { v2.insert(a); } set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));
//交 for(it=v3.begin();it!=v3.end();it++) { if(j==0) { cout<<*it; j=1; } else cout<<" "<<*it; } cout<<endl; v3.clear(); //清空v3集合 set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));
//並 j=0; for(it=v3.begin();it!=v3.end();it++) { if(j==0) { cout<<*it; j=1; } else cout<<" "<<*it; } cout<<endl; v3.clear(); set_difference(v1.begin(),v1.end(),v2.begin(),v2.end(),inserter(v3,v3.begin()));
//差 j=0; for(it=v3.begin();it!=v3.end();it++) { if(j==0) { cout<<*it; j=1; } else cout<<" "<<*it; } cout<<endl; v3.clear(); v1.clear(); //清空v1集合 v2.clear(); //清空v2集合 } return 0; }