Description
编写程序求两个集合的交集和并集。
Input
第一行为两个正整数n和m(n<1000,m<1000,n和m用一个空格隔开)。
第二行为集合A,有n个正整数(均小于10000),两个相邻的整数之间用一个空格隔开;
第三行为集合B,有m个正整数(均小于10000),两个相邻的整数之间用一个空格隔开。
Output
两行
第一行为集合A和集合B的交集。(按增序排列)
第二行为集合A和集合B的并集。(按降序排列)
Sample Input
3 5
12 25 22
25 33 11 22 98
Sample Output
{22,25}
{98,33,25,22,12,11}
Hint
输入是无序的,一定没有重复元素。
输出的次序交集和并集不同。
注意空集为{}。
代码
#include
#include<algorithm>
using namespace std;
bool compare(int a,int b)
{
return a>b;
}
int main()
{
int m,n,i;
cin>>m>>n;
int *a=new int [m];
int *b=new int [n];
for(i=0;i<m;i++)
cin>>a[i];
for(i=0;i<n;i++)
cin>>b[i];
int max,total;
if(m>n)
max=m;
else
max=n;
total=m+n;
int *c=new int[max];
int *d=new int[total];
int count=0,j,count1=0;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if(a[i]==b[j])
{
c[count]=b[j];
count++;
}
}
}
sort(c,c+count);
if(count==0)
cout<<"{"<<"}"<<endl;
else{
cout<<"{";
for(i=0;i<count-1;i++)
cout<<c[i]<<",";
cout<<c[count-1];
cout<<"}";
cout<<endl;
}
int final=count1+count;
int k=0;
for(i=n;i<total;i++)
{
b[i]=a[k];
k++;
}
sort(b,b+total,compare);
for(i=0;i<total;i++)
{
if(b[i]==b[i+1])
{
for(int j=i;j<total;j++)
b[j]=b[j+1];
total--;
}
}
cout<<"{";
for(i=0;i<total-1;i++)
cout<<b[i]<<",";
cout<<b[total-1];
cout<<"}";
return 0;
}