c++实现集合的交并差运算

同样是离散的一个非常简单的实验;

实现集合的交并差运算;

如果不懂概念,请自行百度,不作复述;

代码如下:

#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;
 } 

结果运行图:

评论 4 您还未登录,请先 登录 后发表或查看评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:精致技术 设计师:CSDN官方博客 返回首页

打赏作者

也耶

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值