//处理有序集合的并集
#include<iostream>
#include<iomanip>
using namespace std;
int main ()
{
cout<<"求两数组并集"<<endl;
int a[]={2,5,10,18,20},b[]={1,3,7,8,9,11,25,30};
int m=5,n=8;//m,n,分别记录数组a和数组b得长度
int pa,pb,pc,c[13];
pa=0,pb=0,pc=0;
while(pa<m&&pb<n)//依次比较,把相同的元素写入数组c
{
if(a[pa]==b[pb])
{
c[pc++]=a[pa++];
pb++;
}
else//如果不相同,则把小的元素放入数组c中
if(a[pa]<b[pb])
c[pc++]=a[pa++];
else
c[pc++]=b[pb++];
}
while(pa<m)//退出循环,把剩余的元素写入数组c中、、
c[pc++]=a[pa++];
while(pb<n)
c[pc++]=b[pb++];
for(int i=0;i<pc;i++)
cout<<c[i]<<setw(3);
return 0;
}
处理无序集合的并集两个
#include<iostream>
#include<iomanip>
using namespace std;/输入数组的子函数
/*void inputArry(int *arrptr,int &n,char name)
{
int i;
cout<<"输入集合"<<name<<"中的元素的个数(<20)"<<endl;
cin>>n;
cout<<"输入该集合"<<n<<"个元素的值"<<endl;
for(i=0;i<n;i++)
cin>>arrptr[i];
}*/
void unionArry(int a[],int b[],int c[],int an,int bn,int &cn)//引用变量,数组c的长度一直改变影响形参的改变影响实参
{
int i,j,f=0;
for(i=0;i<an;i++)//先把数组a中的元素全部放入并集中
c[f++]=a[i];
for(i=0;i<bn;i++)//把数组数组b中的元素即已经在并集中的元素依次和集合a中的所有元素比较
{
for(j=0;j<an;j++)
if(b[i]==a[j])
break;
if(j>=an)//b[i]和集合a中的元素不同,即并集中没有元素和b[i]一样则写入并集
c[f++]=b[i];
}
cn=f;//并集数组c的长度
}
int main ()
{
const int N=20,M=20;
int a[N],b[M],c[M+N];
int an=0,bn=0,cn=0,i;
cout<<"请输入数组a的长度"<<endl;
cin>>an;
cout<<"请输入数组a的元素"<<endl;
for(i=0;i<an;i++)
cin>>a[i];
cout<<"请输入数组b的长度"<<endl;
cin>>bn;
cout<<"请输入数组b的元素"<<endl;
for(i=0;i<bn;i++)
cin>>b[i];
unionArry(a,b,c,an,bn,cn);//void unionArry(int a[],int b[],int c[],int an,int bn,int &cn)
//&cn是引用变量,注意调用的时候格式,直接写入实参的名字
cout<<"并集c为"<<endl;
for(i=0;i<cn;i++)
cout<<setw(3)<<c[i];
cout<<endl;
return 0;
}