标签:
#include <iostream> #include <algorithm> int a[1000],b[1000]; int Union[2001];//并 int flag[1000];//b与a交的数在a中下标的标记 using namespace std; int main() { int n,m; int i,j,t; scanf("%d",&n); for(i=0;i<n;i++) scanf("%d",&a[i]); scanf("%d",&m); for(i=0;i<m;i++) scanf("%d",&b[i]); sort(a,a+n); sort(b,b+m); //确定交集、并集和余集 t = i = j = 0; while(i < n && j < m) { if(a[i] < b[j]) { Union[t++] = a[i]; i ++; } else if(a[i] == b[j]){ flag[i] = 1;//表示a中下标为i的数存在交集中 Union[t++] = a[i]; i ++; j ++; } else{ Union[t++] = b[j]; j ++; } } if(i<n)//剩下的并集的部分在集合a中,否则在b中 { for(j=i;j<n;j++) Union[t++] = a[j]; } else{ for(i=j;i<m;i++) Union[t++] = b[i]; } //输出交、并、余 j = 0; for(i=0;i<n;i++) if(flag[i]) { j ++; printf("%d ",a[i]); } if(j)//集合不为空才输出换行 printf("\n"); for(i=0;i<t;i++) printf("%d ",Union[i]); printf("\n"); for(i=0;i<n;i++) if(!flag[i]) printf("%d ",a[i]); printf("\n"); return 0; }
标签:
原文地址:http://www.cnblogs.com/520xiuge/p/5136592.html