#include<stdio.h>
#include<stdlib.h>
int main()
{
int n,m;
int *a,*b,*u,*s;
int i,j,k,flag;
void sort(int[],int);
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
sort(a,n); //第一个集合排序
scanf("%d",&m);
b=(int *)malloc(sizeof(int)*m);
for(i=0;i<m;i++)
scanf("%d",&b[i]);
sort(b,m); //第二个集合排序
u=(int *)malloc(sizeof(int)*(n+m)); //存放并集
s=(int *)malloc(sizeof(int)*n); //标记交集
i=j=k=0;
while(i<n && j<m)
{
if(a[i]<b[j])
{
u[k++]=a[i];
i++;
}
else if(a[i]>b[j])
{
u[k++]=b[j];
j++;
}
else
{
s[i]=1; //第一个集合中下标为i的数字是交集结果,未标记的则是余集
u[k++]=a[i];
i++;
j++;
}
}
if(i<n)
{
for(j=i;j<n;j++)
u[k++]=a[j];
}
else if(j<m)
{
for(i=j;i<m;i++)
u[k++]=b[i];
}
flag=0;
for(i=0;i<n;i++)
{
if(s[i]==1)
{
flag=1;
printf("%d ",a[i]); //输出交集
}
}
if(flag)
printf("\n");
for(i=0;i<k;i++)
printf("%d ",u[i]); //输出并集
printf("\n");
for(i=0;i<n;i++)
{
if(s[i]!=1)
printf("%d ",a[i]); //输出余集
}
printf("\n");
return 0;
}
void sort(int a[],int n)
{
int temp,i,j;
for(i=0;i<n-1;i++)
{
for(j=0;j<n-1-i;j++)
{
if(a[j]>a[j+1])
{
temp=a[j+1];
a[j+1]=a[j];
a[j]=temp;
}
}
}
}
09-17
257
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
12-14