交集并集

 http://www.cppleyuan.com/viewthread.php?tid=4457

//输入集合A、B和全集C,求两集合的交集、并集、补集、差集

/*
并集:以属于A或属于B的元素为元素的集合成为A与B的并(集)
交集: 以属于A且属于B的元素为元素的集合成为A与B的交(集)
差:以属于A而不属于B的元素为元素的集合成为A与B的差(集)
补集:A的补集C-B
*/
/*
例如:A={1,2,3} B={2,3,4} C={1,2,3,4,5}
AB并集为={1,2,3,4}
交集为={2,3}
A补集={4,5}
AB差集为={1}

*/
#include <iostream>
#include <vector>
using namespace std;

int main()
{
        vector<int> A,B,C;
        int temp;
       
        cout<<"input A,finished by a character"<<endl;
        while(cin>>temp)
                A.push_back(temp);
        cin.clear() ;//清除错误状态
        cin.ignore() ;//跳过无效数据
       
       
        cout<<"input B,finished by a character"<<endl;
        while(cin>>temp)
                B.push_back(temp);
        cin.clear() ;
        cin.ignore() ;
       
       
        cout<<"input C,finished by a character"<<endl;
        while(cin>>temp)
                C.push_back(temp);
        cin.clear();
        cin.ignore();
       
       
       
        //求交集
        vector<int> AND;
       
       
        for(int i=0;i<A.size();i++)
                for (int j=0;j<B.size();j++)
                        if(A[i]==B[j])
                                AND.push_back(B[j]);
        cout<<"交集为"<<endl;
        //显示交集
        for(i=0;i<AND.size();i++)
                cout<<AND[i]<<" ";
        cout<<endl;
                       
        //求并集
        AND.clear();

        //先把A的元素依次加入
        for(i=0;i<A.size();i++)
                AND.push_back(A[i]);
       
        //加入B中有且与A的每一个元素都不相等的元素
       
        for(int j=0;j<B.size();j++)
        {
                int k=0;
                for(i=0;i<A.size();i++)
                        if(B[j]!=A[i])
                                k++;
                if(k>=A.size())
                        AND.push_back(B[j]);
        }

        //显示并集               
        cout<<"并集为"<<endl;
        for(i=0;i<AND.size();i++)
                cout<<AND[i]<<" ";
        cout<<endl;
                               
        return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值