题目描述
输入两个集合,分别存放在两个数组中。如a={3,2,1,4,5};b={3,5,8,6,9};a和b的并集为c={1,2,3,4,5,6,8,9};a和b的交集为d={3,5};
(要求用指向数组元素的指针变量处理;编写void merge(int *pa,int *pb,int n,int m)函数,完成交集功能;编写void session(int *pa,int *pb,int n,int m) 函数,完成交集功能。)
输入
先输入n,表示集合a的元素个数;(1<=100)
输入集合a的n个元素值(为整数,无重复值);
输入m ,表示集合b的元素个数;(1<=100)
输入集合b的n个元素值(为整数,无重复值)。
输出
先按从小到大的顺序输出并集中的各元素值,占一行;
再按从小到大的顺序输出交集中的各元素值,占一行。
样例输入
4
4 3 2 1
5
4 2 1 7 10
样例输出
1 2 3 4 7 10
1 2 4
————————————————————————————————————
#include
void merge(int pa,int *pb,int n,int m)
{
int i,j,k,a[200],*p1,t;
p1=a;
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
if((pa+i)==*(pb+j))
{
for(k=j+1;k
m--;
break;
}
}
}
for(i=0;i
for(i=n,j=0;i
for(i=0;i
{
for(j=i+1;j
{
if(*(p1+i)>(p1+j)) t=(p1+i),*(p1+i)=*(p1+j),*(p1+j)=t;
}
}
for(i=0;i
printf("\n");
}
void session(int *pc,int *pd,int n,int m)
{
int i,j,k=0,b[200],t,*p2;
p2=b;
for(i=0;i
{
for(j=0;j
{
if(*(pc+i)==*(pd+j))
{
*(p2+k)=*(pc+i);
k++;
break;
}
}
}
for(i=0;i
{
for(j=i+1;j
{
if(*(p2+i)>(p2+j)) t=(p2+i),*(p2+i)=*(p2+j),*(p2+j)=t;
}
}
for(i=0;i<k;i++) printf("%d ",*(p2+i));
}
int main()
{
int n,m,a[100],b[100],*pa,*pb,i;
pa=a;
pb=b;
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]);
merge(a,b,n,m);
session(a,b,n,m);
return 0;
}