同样是离散的一个非常简单的实验;
实现集合的交并差运算;
如果不懂概念,请自行百度,不作复述;
代码如下:
#include<iostream>
#include<cstring>
#include<stdlib.h>
using namespace std;
int inter(int *a,int *b,int m,int n)//交集
{
int len=m>n?m:n;
int *c=(int*)malloc(sizeof(int)*len);
int d=0;
for(int i=0;i<m;i++)
{
for(int j=0;j<n;j++)
{
if(a[i]==b[j])
{
c[d++]=a[i];
}
}
}
cout<<"输出a与b的交集:"<<endl;
for(int i=0;i<d;i++)
{
cout<<c[i]<<" ";
}
cout<<endl;
}
int union_a(int *a,int *b,int m,int n)//并集
{
int k=m,es=1;
int *c=(int *)malloc(sizeof(int)*(m+n));
for(int i=0;i<m;i++)
{
c[i]=a[i];
}
for(int i=0;i<n;i++)
{
es=1;
for(int j=0;j<m;j++)
{
if(b[i]==c[j])
{
es=0;
}
}
if(es)
{
c[k]=b[i];
k++;
}
}
cout<<"输出集合a,b的并集:"<<endl;
for(int i=0;i<k;i++)
{
cout<<c[i]<<" ";
}
cout<<endl;
}
int diff(int *a,int *b,int m,int n)//差集
{
int k=0;
int *c=(int *)malloc(sizeof(int )*m);
for(int i=0;i<m;i++)
{
c[i]=a[i];
}
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
{
if(b[i]==c[j])
{
for(k=j;k<m;k++)
{
c[k]=c[k+1];
m--;
break;
}
}
}
}
cout<<"输出集合a,b的差集:"<<endl;
for(int i=0;i<k;i++)
{
cout<<c[i]<<" ";
}
cout<<endl;
}
int main()
{
int *a,*b;
int m,n;//集合a,b的个数
int c;
cout<<"输入集合a的长度:"<<endl;
cin>>m;
cout<<"输入集合b的长度:"<<endl;
cin>>n;
a=(int*)malloc(sizeof(int)*m);
b=(int*)malloc(sizeof(int)*n);
cout<<"输入集合a:"<<endl;
for(int i=0;i<m;i++)
{
cin>>a[i];
}
cout<<"输入集合b:"<<endl;
for(int i=0;i<n;i++)
{
cin>>b[i];
}
inter(a,b,m,n);
union_a(a,b,m,n);
diff(a,b,m,n);
return 0;
}
结果运行图: