C++学习的简单问题(三)
2013-04-09 00:23 liuzq2013 阅读(253) 评论(0) 收藏 举报问题描述
给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
第一行为一个整数n,表示集合A中的元素个数。 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。 第三行为一个整数m,表示集合B中的元素个数。 第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。 集合中的所有元素均为int范围内的整数,n、m<=1000。
输出格式
第一行按从小到大的顺序输出A、B交集中的所有元素。 第二行按从小到大的顺序输出A、B并集中的所有元素。 第三行按从小到大的顺序输出B在A中的余集中的所有元素。
#include <iostream> using namespace std; void bubbleSort(int* p,int n) { int t=0; for(int i=0;i<n;i++) { for(int j=0;j<n-i-1;j++) { if(*(p+j)>*(p+j+1)) { t=*(p+j); *(p+j)=*(p+j+1); *(p+j+1)=t; } } } } void intersect(int* p,int n,int* q,int m) { int* flag=new int[n]; int count=0; for(int i=0;i<n;i++) { for(int j=0;j<m;j++) { if(*(q+j)==*(p+i)) { count++; *(flag+i)=1; } } } int *pp=new int[count]; int *pq=new int[m+n-count]; int *qq=new int[n-count]; count=0; int count2=0; for(int i=0;i<n;i++) { if(*(flag+i)==1) { *(pp+count)=*(p+i); count++; } else { *(qq+count2)=*(p+i); *(pq+count2)=*(p+i); count2++; } } for(int k=count2;k<m+n-count;k++) { *(pq+k)=*(q+k-count2); } bubbleSort(pp,count); bubbleSort(pq,m+n-count); bubbleSort(qq,count2); for(int i=0;i<count;i++) { cout<<*(pp+i)<<" "; } if(count!=0) { cout<<endl; } for(int i=0;i<m+n-count;i++) { cout<<*(pq+i)<<" "; } cout<<endl; for(int i=0;i<count2;i++) { cout<<*(qq+i)<<" "; } cout<<endl; } int main() { int n,m; cin>>n; int *p=new int[n]; for(int i=0;i<n;i++) cin>>*(p+i); cin>>m; int *q=new int[m]; for(int j=0;j<m;j++) cin>>*(q+j); intersect(p,n,q,m); return 0; }
浙公网安备 33010602011771号