【问题描述】
从标准输入中输入两组整数(每行不超过20个整数,每组整数中元素不重复),求两组整数的异或集(合并两组整数,去掉在两组整数中都出现的整数后形成的集合)和交集(在两组整数中都出现的整数形成的集合),并按从大到小顺序排序输出。
【输入形式】
首先输入第一组整数,以一个空格分隔各个整数;然后在新的一行上输入第二组整数,以一个空格分隔。两行最后一个整数后没有空格,只有回车换行。
【输出形式】
先按从大到小顺序排序输出两组整数的异或集(以一个空格分隔各个整数,最后一个整数后也有一个空格),然后在下一行按照从大到小的顺序排序输出两组整数的交集(以一个空格分隔各个整数,最后一个整数后也有一个空格)。若两组整数的异或集或交集为空,则相应的输出行上只输出一回车换行。
#include<stdio.h>
int main()
{
int a[20],b[20],c[40],d[40];
int i,j=0,m,z,p=0,k=1,t=1;
for(i=0;i<20;i++)
{
scanf("%d",&a[i]);
if(getchar()=='\n')//根据是否有回车判断有几个数
break;
else
k++;
}
for(i=0;i<20;i++)
{
scanf("%d",&b[i]);
if(getchar()=='\n')
break;
else
t++;
}
z=k+t;//总共输入的数
for(i=0;i<k;i++)
c[i]=a[i];
for(i=0;i<t;i++)
c[i+k]=b[i];
for(i=1;i<z;i++)
for(j=0;j<z-i;j++)
if(c[j]<c[j+1])
{
m=c[j];
c[j]=c[j+1];
c[j+1]=m;//冒泡法排序
}
for(i=0;i<z-1;i++)//找出相同的数列,最后一个数不能插入要不跟谁比啊
if(c[i]==c[i+1])
{
d[p]=c[i];
for(j=i;j<z-2;j++)
c[j]=c[j+2];//逐次覆盖
p++;
z-=2;
i-=2;
}
for(i=0;i<z;i++)
printf("%d ",c[i]);
printf("\n");
for(i=0;i<p;i++)
printf("%d ",d[i]);
return 0;
}