集合运算

xiaoxiao2021-02-28  79

集合运算

时间限制(普通/Java):3000MS/10000MS          运行内存限制:65536KByte 总提交:124            测试通过:39

描述

给定两个集合A和B的所有元素,计算它们的交、并、差集。

输入

输入数据有多组,第一行为数据的组数T,接下来有2T行,每组数据占2行,每行有若干个整数,第一行的所有整数构成集合A,第二行的所有整数构成集合B,分别用空格分隔。A和B最多分别不超过100个元素。

输出

输出A、B的交、并、差集中的所有元素(以递增顺序)。每个集合占一行,数据元素之间用空格分隔。

样例输入

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

样例输出

3 6 8 0 1 2 3 4 5 6 7 8 9 0 1 2 4 5 7 用STL做的,上网查了一些资料。 #include<iostream> #include<cstring> #include<sstream> #include<cstdio> #include <algorithm> #include<set> using namespace std; int main() { set<int>a; set<int>b; set<int>c; int n,x,l,aa; string str1,str2; scanf("%d",&n); getchar(); while(n--) { int i=0,j=0,x=0,f=1,t; getline(cin,str1); std::stringstream ss(str1); while (ss>>aa) { a.insert(aa); } getline(cin,str2); std::stringstream ss1(str2); while (ss1>>aa) { b.insert(aa); } set<int>::iterator ii; set_intersection(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin())); l=c.size(); i=0; for(ii=c.begin(); ii!=c.end(); ii++) { i++; if(i<l) printf("%d ",(*ii)); else printf("%d\n",*ii); } c.clear(); set_union(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin())); l=c.size(); i=0; for(ii=c.begin(); ii!=c.end(); ii++) { i++; if(i<l) printf("%d ",(*ii)); else printf("%d\n",(*ii)); } c.clear(); set_difference(a.begin(),a.end(),b.begin(),b.end(),insert_iterator<set<int> >(c,c.begin())); l=c.size(); i=0; for(ii=c.begin(); ii!=c.end(); ii++) { i++; if(i<l) printf("%d ",(*ii)); else printf("%d\n",(*ii)); } c.clear(); } return 0; }
转载请注明原文地址: https://www.6miu.com/read-61304.html

最新回复(0)