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

//输入集合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;
}
posted @ 2010-12-04 17:38  瓜蛋  阅读(2210)  评论(0编辑  收藏  举报