输入两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。交集、并集和余集的计算都要求写成一个单独的函数。
输入第一行为一个整数n,表示集合A中的元素个数。
第二行有n个按从小到大的顺序输入且互不相同的整数,表示集合A中的元素
第三行为一个整数m,表示集合B中的元素个数。
第四行有m个按从小到大的顺序输入且互不相同的整数,表示集合B中的元素
集合中的所有元素均为int范围内的整数,n、m<=1000。
输出第一行按从小到大的顺序输出A、B交集中的所有元素。
第二行按从小到大的顺序输出A、B并集中的所有元素。
第三行按从小到大的顺序输出B在A中的余集中的所有元素。
输入:
5
1 2 3 4 5
5
2 4 6 8 10
输出:
2 4
1 2 3 4 5 6 8 10
1 3 5
#include <stdio.h>
int a[1010];
int b[1010];
int n,m;
//并集
void unionSet()
{
int p1=0;
int p2=0;
while(p1<n&&p2<m){
if(a[p1]==b[p2]){
printf("%d ",a[p1++]);
p2++;
}
while(p1<n&&a[p1]<b[p2]){
printf("%d ",a[p1++]);
}
while(p2<m&&b[p2]<a[p1]){
printf("%d ",b[p2++]);
}
}
while(p1<n){
printf("%d ",a[p1++]);
}
while(p2<m){
printf("%d ",b[p2++]);
}
printf("\n");
}
//交集
void intersection()
{
int p1=0;
int p2=0;
while(p1<n&&p2<m){
if(a[p1]==b[p2]){
printf("%d ",a[p1++]);
p2++;
}
while(p1<n&&a[p1]<b[p2]){
p1++;
}
while(p2<m&&b[p2]<a[p1]){
p2++;
}
}
printf("\n");
}
//补集
void supplementarySet()
{
int p1=0;
int p2=0;
while(p1<n&&p2<m){
while(a[p1]==b[p2]){
p1++;
p2++;
}
while(p1<n&&a[p1]<b[p2]){
printf("%d ",a[p1++]);
}
while(p2<m&&b[p2]<a[p1]){
p2++;
}
}
while(p1<n){
printf("%d ",a[p1++]);
}
printf("\n");
}
int main()
{
int i;
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]);
}
intersection();
unionSet();
supplementarySet();
}