码迷,mamicode.com
首页 > 其他好文 > 详细

集合运算

时间:2016-01-16 23:50:54      阅读:336      评论:0      收藏:0      [点我收藏+]

标签:

 

问题描述
  给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
输入格式
  第一行为一个整数n,表示集合A中的元素个数。
  第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
  第三行为一个整数m,表示集合B中的元素个数。
  第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
  集合中的所有元素均为int范围内的整数,n、m<=1000。
输出格式
  第一行按从小到大的顺序输出A、B交集中的所有元素。
  第二行按从小到大的顺序输出A、B并集中的所有元素。
  第三行按从小到大的顺序输出B在A中的余集中的所有元素。
样例输入
5
1 2 3 4 5
5
2 4 6 8 10
样例输出
2 4
1 2 3 4 5 6 8 10
1 3 5
样例输入
4
1 2 3 4
3
5 6 7
样例输出
1 2 3 4 5 6 7
1 2 3 4
思路:用flag数组标记集合a与集合b相交的数在集合a中位置,在查找中,如果a[i]=b[j],flag标记为1,i、j分别自加,同时元素入并交Union集合,
否则,小的数入并交集合,同时下标加1;当结束查找时,可能其中一个集合还有数未比较,作以下判断,i<n(集合a中元素个数),a集合剩下元素入Union集合,
否则b集合中剩下元素入Union集合
#include <iostream>
#include <algorithm>
int a[1000],b[1000];
int Union[2001];//
int flag[1000];//b与a交的数在a中下标的标记
using namespace std;
int main()
{
    int n,m;
    int i,j,t;
    scanf("%d",&n);
    for(i=0;i<n;i++)
        scanf("%d",&a[i]);
    scanf("%d",&m);
    for(i=0;i<m;i++)
        scanf("%d",&b[i]);
    sort(a,a+n);
    sort(b,b+m);
    //确定交集、并集和余集
    t = i = j = 0;
    while(i < n && j < m)
    {
        if(a[i] < b[j])
        {
            Union[t++] = a[i];
            i ++;
        }
        else if(a[i] == b[j]){
            flag[i] = 1;//表示a中下标为i的数存在交集中
            Union[t++] = a[i];
            i ++;
            j ++;
        }
        else{
            Union[t++] = b[j];
            j ++;
        }
    }
    if(i<n)//剩下的并集的部分在集合a中,否则在b中
    {
        for(j=i;j<n;j++)
            Union[t++] = a[j];
    }
    else{
        for(i=j;i<m;i++)
            Union[t++] = b[i];
    }
    //输出交、并、余
    j = 0;
    for(i=0;i<n;i++)
        if(flag[i])
        {
            j ++;
            printf("%d ",a[i]);
        }
    if(j)//集合不为空才输出换行
        printf("\n");
    for(i=0;i<t;i++)
        printf("%d ",Union[i]);
    printf("\n");
    for(i=0;i<n;i++)
        if(!flag[i])
            printf("%d ",a[i]);
    printf("\n");
    return 0;
}

 

集合运算

标签:

原文地址:http://www.cnblogs.com/520xiuge/p/5136592.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!