TZOJ 1743 集合運算(set並、交、差集)

Descriptionios

給定兩個集合A和B的全部元素,計算它們的交、並、差集。spa

Inputcode

輸入數據有多組,第一行爲數據的組數T,接下來有2T行,每組數據佔2行,每行有若干個整數,第一行的全部整數構成集合A,第二行的全部整數構成集合B,分別用空格分隔。A和B最多分別不超過100個元素。blog

Outputip

輸出A、B的交、並、差集中的全部元素(以遞增順序)。每一個集合佔一行,數據元素之間用空格分隔。ci

Sample Input 字符串

1
0 1 2 3 4 5 6 7 8 8
3 6 8 9get

Sample Outputstring

3 6 8
0 1 2 3 4 5 6 7 8 9
0 1 2 4 5 7it

#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; }
相關文章
相關標籤/搜索