c++编程 交并补集
c++题目1.设有两个任意整型数据集合(最多不超过100个元素),编程实现如下任务:(1)求解集合的交集;(2)求解集合的并集;(3)求解集合的差运算。说明:a)交集:设...
c++题目
1.设有两个任意整型数据集合(最多不超过100个元素),编程实现如下任务:
(1)求解集合的交集;
(2)求解集合的并集;
(3)求解集合的差运算。
说明:
a)交集:设任意两个集合A和B,由集合A和B的所有共同元素组成的集合S,称为A和B的交集,记作A∩B。
b)并集:设任意两个集合A和B,所有属于A或属于B的元素组成的集合S,称为A和B的并集,记作A∪B。
c)差集:设A、B为任意两个集合,所有属于A而不属于B的一切元素组成的集合S称为B对于A的补集,记作A-B。 展开
1.设有两个任意整型数据集合(最多不超过100个元素),编程实现如下任务:
(1)求解集合的交集;
(2)求解集合的并集;
(3)求解集合的差运算。
说明:
a)交集:设任意两个集合A和B,由集合A和B的所有共同元素组成的集合S,称为A和B的交集,记作A∩B。
b)并集:设任意两个集合A和B,所有属于A或属于B的元素组成的集合S,称为A和B的并集,记作A∪B。
c)差集:设A、B为任意两个集合,所有属于A而不属于B的一切元素组成的集合S称为B对于A的补集,记作A-B。 展开
2个回答
展开全部
可以用指针
#include<iostream>
#include<iomanip>
using namespace std;
const int m=100,n=100;
int main()
{ int A[m],B[n],S[n],C[m+n],D[m];
int a,b,s=0,c,d,*pA,*pB,*pS,*pC,*pD;
cout<<"2016111893 蔡睿"<<endl;
cout<<"注意a包含b!"<<endl;
cout<<"请输入集合A中元素的个数(不允许大于100个):";
cin>>a;
cout<<"请依次输入A中的"<<a<<"个元素:"<<endl;
for(pA=A;pA<A+a;pA++)
cin>>*pA;
cout<<"请输入集合B中元素的个数(不允许大于"<<a<<"个):";
cin>>b;
cout<<"请依次输入B中的"<<b<<"个元素:"<<endl;
for(pB=B;pB<B+b;pB++)
cin>>*pB;
for(pA=A,pS=S;pA<A+a;pA++)
{ for(pB=B;pB<B+b;pB++)
{ if(*pA==*pB)//求交集
{*pS=*pA;pS++;s+=1;break;}
}
}
cout<<"集合A,B的交集A∩B中的元素依次为:"<<endl;
for(pS=S;pS<S+s;pS++)
cout<<setw(3)<<*pS;cout<<endl;
for(pC=C,c=a+b,pA=A,pB=B;pC<C+c;pC++)
{ if(pC<C+a)
{*pC=*pA;pA++;}
else
{*pC=*pB;pB++;}
}
for(pS=S;pS<S+s;pS++)
{ for(pC=C;pC<C+c;pC++)
{if(*pC==*pS)
{ for(;pC<C+c;pC++)
*pC=*(pC+1);
c-=1;break;
}
}
}//AB均放入C删掉交集一次即得补集
cout<<"A和B集合的并集集合A∪B为:"<<endl;
for(pC=C;pC<C+c;pC++)
cout<<setw(3)<<*pC;cout<<endl;
for(pD=D,pA=A,d=a;pD<D+d;pD++)
{ *pD=*pA;pA++;}
for(pS=S;pS<S+s;pS++)
{ for(pD=D;pD<D+d;pD++)
{ if(*pD==*pS)
{ for(;pD<D+d;pD++)
*pD=*(pD+1);d-=1;break;
}//删掉A中的B
}
}
cout<<"A与B的差集A-B为:"<<endl;
for(pD=D;pD<D+d;pD++)
cout<<setw(3)<<*pD;cout<<endl;
#include<iostream>
#include<iomanip>
using namespace std;
const int m=100,n=100;
int main()
{ int A[m],B[n],S[n],C[m+n],D[m];
int a,b,s=0,c,d,*pA,*pB,*pS,*pC,*pD;
cout<<"2016111893 蔡睿"<<endl;
cout<<"注意a包含b!"<<endl;
cout<<"请输入集合A中元素的个数(不允许大于100个):";
cin>>a;
cout<<"请依次输入A中的"<<a<<"个元素:"<<endl;
for(pA=A;pA<A+a;pA++)
cin>>*pA;
cout<<"请输入集合B中元素的个数(不允许大于"<<a<<"个):";
cin>>b;
cout<<"请依次输入B中的"<<b<<"个元素:"<<endl;
for(pB=B;pB<B+b;pB++)
cin>>*pB;
for(pA=A,pS=S;pA<A+a;pA++)
{ for(pB=B;pB<B+b;pB++)
{ if(*pA==*pB)//求交集
{*pS=*pA;pS++;s+=1;break;}
}
}
cout<<"集合A,B的交集A∩B中的元素依次为:"<<endl;
for(pS=S;pS<S+s;pS++)
cout<<setw(3)<<*pS;cout<<endl;
for(pC=C,c=a+b,pA=A,pB=B;pC<C+c;pC++)
{ if(pC<C+a)
{*pC=*pA;pA++;}
else
{*pC=*pB;pB++;}
}
for(pS=S;pS<S+s;pS++)
{ for(pC=C;pC<C+c;pC++)
{if(*pC==*pS)
{ for(;pC<C+c;pC++)
*pC=*(pC+1);
c-=1;break;
}
}
}//AB均放入C删掉交集一次即得补集
cout<<"A和B集合的并集集合A∪B为:"<<endl;
for(pC=C;pC<C+c;pC++)
cout<<setw(3)<<*pC;cout<<endl;
for(pD=D,pA=A,d=a;pD<D+d;pD++)
{ *pD=*pA;pA++;}
for(pS=S;pS<S+s;pS++)
{ for(pD=D;pD<D+d;pD++)
{ if(*pD==*pS)
{ for(;pD<D+d;pD++)
*pD=*(pD+1);d-=1;break;
}//删掉A中的B
}
}
cout<<"A与B的差集A-B为:"<<endl;
for(pD=D;pD<D+d;pD++)
cout<<setw(3)<<*pD;cout<<endl;
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询