集合的交集、并集、补集、差运算的文件迅速处理

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_41006871/article/details/84568781

【实验目的】掌握用计算机求集合的交、并、差和补运算的方法。

【实验内容】编程实现集合的交、并、差和补运算。

【实验原理和方法】

(1)用数组A,B,C,E表示集合。输入数组A,B,E(全集),输入数据时要求检查数据是否重复(集合中的数据要求不重复),要求集合A,B是集合E的子集。

以下每一个运算都要求先将集合C置成空集。

(2)二个集合的交运算:把数组A中元素逐一与数组B中的元素进行比较,将相同的元素放在数组C中,数组C便是集合A和集合B的交。

 (3)二个集合的并运算:把数组A中各个元素先保存在数组C中。将数组B中的元素逐一与数组B中的元素进行比较,把不相同的元素添加到数组C中,数组C便是集合A和集合B的并。

(4)二个集合的差运算:把数组A中各个元素先保存在数组C中。将数组B中的元素逐一与数组B中的元素进行比较,把相同的元素从数组C中删除,数组C便是集合A和集合B的差A-B。

(5)集合的补运算:将数组E中的元素逐一与数组A中的元素进行比较,把不相同的元素保存到数组C中,数组C便是集合A关于集合E的补集。

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<set>
#include<cstring>
using namespace std;
const int maxn=999;
set<int> a,b,e;
set<int>:: iterator it;
int A[maxn],B[maxn],C[maxn],E[maxn];
int main(){
    int n,x,i=0,j=0,k=0;
    freopen("D:\\in.txt","r",stdin);
    freopen("D:\\out.txt","w",stdout);
    ///读入集合A的数据
    cout<<"请输入集合A的数据量:";
    cin>>n;
    for(int z=1;z<=n;++z){
        cin>>x;
        a.insert(x);
    }
    cout<<"集合A去掉重复的数据:";
    for(it=a.begin();it!=a.end();++it){
        cout<<*it<<" ";
        A[++i]=*it;
    }
    cout<<""<<endl;

    ///读入集合B的数据
    cout<<"请输入集合B的数据量:";
    cin>>n;
    for(int z=1;z<=n;++z){
        cin>>x;
        b.insert(x);
    }
    cout<<"集合B去掉重复的数据:";
    for(it=b.begin();it!=b.end();++it){
        cout<<*it<<" ";
        B[++j]=*it;
    }
    cout<<""<<endl;

    ///读入集合E的数据
    cout<<"请输入集合E的数据量:";
    cin>>n;
    for(int z=1;z<=n;++z){
        cin>>x;
        e.insert(x);
    }
    cout<<"集合E去掉重复的数据:";
    for(it=e.begin();it!=e.end();++it){
        cout<<*it<<" ";
        E[++k]=*it;
    }
    cout<<""<<endl;
    int _i=1,_j=1,_k=0;
    while(_i<=i&&_j<=j){
        if(A[_i]<B[_j]){
            ++_i;
        }else if(A[_i]>B[_j]){
            ++_j;
        }else{
            C[++_k]=A[_i];
            ++_i;++_j;
        }
    }
    cout<<"A∩B=";
    if(_k==0){
        printf("Φ");
    }else{
        for(int z=1;z<=_k;++z){
            cout<<C[z]<<" ";
        }
    }
    cout<<""<<endl;
    _i=1,_j=1,_k=0;
    while(_i<=i&&_j<=j){
        if(A[_i]<B[_j]){
            C[++_k]=A[_i];
            ++_i;
        }else if(A[_i]>B[_j]){
            C[++_k]=B[_j];
            ++_j;
        }else{
            C[++_k]=A[_i];
            ++_i;++_j;
        }
    }
    if(_i>i){
        for(int z=_j;z<=j;++z){
            C[++_k]=B[z];
        }
    }else if(_j>j){
        for(int z=_i;z<=i;++z){
            C[++_k]=A[z];
        }
    }
    cout<<"A∪B=";
    for(int z=1;z<=_k;++z){
        cout<<C[z]<<" ";
    }
    cout<<""<<endl;

    _i=1,_j=1,_k=0;
    while(_i<=i&&_j<=j){
        if(A[_i]<B[_j]){
            C[++_k]=A[_i];
            ++_i;
        }else if(A[_i]>B[_j]){
            ++_j;
        }else{
            ++_i;++_j;
        }
    }
    if(_j>j){
        for(int z=_i;z<=i;++z){
            C[++_k]=A[z];
        }
    }
    cout<<"A-B=";
    if(_k==0){
        printf("Φ");
    }else{
        for(int z=1;z<=_k;++z){
            cout<<C[z]<<" ";
        }
    }
    cout<<""<<endl;

    _i=1,_j=1,_k=0;
    while(_i<=i&&_j<=k){
        if(A[_i]<E[_j]){
            ++_i;
        }else if(A[_i]>E[_j]){
            C[++_k]=E[_j];
            ++_j;
        }else{
            ++_i;++_j;
        }
    }
    for(int z=_j;z<=k;++z){
        C[++_k]=E[z];
    }
    cout<<"A关于E的补集:";
    for(int z=1;z<=_k;++z){
        cout<<C[z]<<" ";
    }
    cout<<""<<endl;

    fclose(stdin);
    fclose(stdout);
    return 0;
}
 

 

 

补充一个生成相应数据的代码:

#include<cstdio>
#include<cstring>
#include<ctime>
#include<cstdlib>
using namespace std;
int vis[9999];
int main(){
    freopen("D:\\out2.txt","w",stdout);
    srand(time(NULL));
    int n,t,a,b;
    for(int i=0;i<5;++i){
        n=rand()%9+1;
        a=n;
        printf("%d\n",n);
        for(int j=0;j<n;++j){
            t=rand()%30+1;
            while(vis[t]){
                t=rand()%30+1;
            }
            printf("%d ",t);
        }
        puts("");
        n=rand()%9+1;
        b=n;
        printf("%d\n",n);
        for(int j=0;j<n;++j){
            t=rand()%30+1;
            while(vis[t]){
                t=rand()%30+1;
            }
            printf("%d ",t);
        }
        puts("");
        n=rand()%19+1;
        while(n<a){
            n=rand()%19+1;
        }
        printf("%d\n",n);
        for(int j=0;j<n;++j){
            t=rand()%30+1;
            while(vis[t]){
                t=rand()%30+1;
            }
            printf("%d ",t);
        }
        puts("");
    }
    fclose(stdout);
    return 0;
}
 

展开阅读全文

集合并集与交集

05-25

<div>n <span style="font-size:16px;"><span><span style="font-size:20px;color:#FF0000;"><strong><span>课程亮点:</span></strong></span></span></span> n</div>n<div style="font-size:16px;">n <span style="color:#424242;"><span style="background-color:#FFFAA5;">课程培训详细的笔记以及实例代码,让学员开始掌握Redis知识点</span></span> n</div>n<p style="font-size:16px;">n <span style="font-size:14px;"><span><span style="background-color:#FFFFFF;"><span style="color:#424242;"><br /></span></span></span></span> n</p>n<div>n <div>n <span style="font-size:16px;"><span><strong><span style="background-color:#FFFFFF;">课程内容:</span></strong></span></span> n </div>n <div>n  n <ol><li>n <span style="font-size:16px;color:#E53333;"><strong>第5章:列表类型:列表各种操作命令、列表命令时间复杂度、列表应用场景、列表内部编码</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第6章:集合类型:集合各种操作命令、集合命令时间复杂度、集合应用场景、集合内部编码</strong></span>n </li>n <li>n <span style="font-size:16px;color:#E53333;"><strong>第7章:有序集合类型:有序集合各种操作命令、有序集合命令时间复杂度、有序集合应用场景、有序集合内部编码</strong></span>n </li>n </ol></div>n</div>n<div style="font-size:16px;">n <span style="color:#FF0000;"><strong><span style="font-size:18px;">课程特色:</span></strong></span> n</div>n<div>n <ol><li>n 笔记Redis数据库 :用200多条笔记串连所有知识点,让学员从一点一滴积累,学习过程无压力n </li>n <li>n 笔记标题采用关键字标识法,帮助学员更加容易记住知识点n </li>n <li>n 笔记以超链接形式让知识点关联起来,形式知识体系n </li>n <li>n 采用先概念后实例再应用方式,知识点深入浅出n </li>n <li>n <strong>提供授课内容笔记作为课后复习以及工作备查工具</strong> n </li>n </ol></div>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;">部分图表(电脑PC端查看):</span></strong></strong></span></span></span> n</p>n<p>n <span style="font-size:16px;"><span><span style="color:#00B050;"><strong><strong><span style="font-size:18px;"><img src="https://img-bss.csdn.net/201905251335369172.png" alt="" /><img src="https://img-bss.csdn.net/201905251335429146.png" alt="" /><img src="https://img-bss.csdn.net/201905251335472334.png" alt="" /><img src="https://img-bss.csdn.net/201905251335527303.png" alt="" /><img src="https://img-bss.csdn.net/201905251335582663.png" alt="" /><img src="https://img-bss.csdn.net/201905251336033320.png" alt="" /><img src="https://img-bss.csdn.net/201905251336081754.png" alt="" /><br /></span></strong></strong></span></span></span> n</p>

没有更多推荐了,返回首页