集合运算

问题描述

  给出两个整数集合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;
}
时间: 2024-08-07 04:31:14

集合运算的相关文章

sql的基础语句-单行函数,dual,数字函数,日期函数,表连接,集合运算,分组报表,单行子查询,多行子查询

3. 单行函数 3.1 转换函数 select ascii('A'),chr(65) from dual; select to_char(1243123),1231451 from dual;靠左边的就是字符串,靠右边的就是数字 select to_char(123512a121) from dual;   --错误的写法,没有引号表示数字,但是数字里面包含了字母,不合法的输入值 select to_number('123141211') from dual; select to_number(

oracle中 常用的 join on 相关和 集合运算的总结

sql常用联合查询的 join on . left join(左连接) . right join (右连接).inner join (等值连接)以及常用的集合运算有:union.unionall.minus.intersect的效果和总结 首先接着用上一篇的book表和pbook表: 首先把join on和inner join 放在一起: select * from book a join ( select id,name,price from pbook) b on a.id=b.id; se

SQL集合运算 差集 并集 交

SQL-3标准中提供了三种对检索结果进行集合运算的命令:并集UNION:交集INTERSECT:差集EXCEPT(在Oracle中叫做 MINUS).在有些数据库中对此的支持不够充分,如MySql中只有UNION,没有其他两种.实际上这些运算都可以通过普通的SQL来实现,虽然有时有些繁琐. 假设有两个表(或视图)s,t,s中有两个字段sa,sb:t中有两个字段ta,tb: 差集EXCEPT: PLAIN TEXT SQL: SELECTsaFROMs EXCEPT SELECTtaFROMt;

SQL集合运算

转载:详解SQL集合运算 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式-上篇 [T-SQL基础]04.表表达式-下篇 [T-SQL基础]05.集合运算

笔记-Microsoft SQL Server 2008技术内幕:T-SQL语言基础-06 集合运算

T-SQL支持3种集合运算:并集(UNION).交集(INTERSECT)和差集(EXCEPT).集合运算涉及的两个查询不能包含ORDER BY子句. UNION ALL集合运算 UNION ALL不会对行进行比较,也不会删除重复行.假设查询Query1返回m行,查询Query2返回n行,则Query1 UNION ALL Query2返回(m+n)行. SELECT country, region, city FROM HR.Employees UNION ALL SELECT country

INTERSECT(交集)集合运算

在集合论中,两个集合(记为集合A和B)的交集是由既属于A,也属于B的所有元素组成的集合. 在T-SQL 中,INTERSECT 集合运算对两个输入查询的结果集取其交集,只返回在两个查询结果集中都出现的行. INTERSECT DISTINCT集合运算 INTERSECT 集合运算在逻辑上首先删除两个输入多集中的重复行(把多集变为集合),然后返回只在两个集合中都出现的行.换句话说,如果一个行在两个输入多集中都至少出现一次,那么交集返回的结果中将包含这一行. SELECT c FROM a INTE

UNION(并集)集合运算

在集合论中,两个集合(记为集合A和B)的并集是一个包含集合A和B中所有元素的集合.换句话说,如果一个元素属于任何一个输入集合,那么它也属于结果集. 在T-SQL中,UNION 集合运算可以将两个输入查询的结果集组合成一个结果集.如果一个行在任何一个输入集合中出现,它也会在UNION运算的结果中出现.T-SQL 支持在UNION集合运算中使用UNION ALL 和UNION(隐含DISTINCT,DISTINCT不能显示指定)选项. UNION ALL 集合运算 对于作为运算的输入查询而生成的多集

详解SQL集合运算

以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式-上篇 [T-SQL基础]04.表表达式-下篇 [T-SQL基础]05.集合运算 [T-SQL基础]06.透视.逆透视.分组集 [T-SQL基础]07.数据修改 [T-SQL基础]08.事务和并发 [

5.创建表,使用alter进行表信息的增删改,Oracle回收站,集合运算

 1  Oracle基于用户的管理方案 2 DDL语句可以管理数据库的对象有:视图   索引  序列  同义词   约束 3  创建一个表,有2个条件(1 有权限:2有表空间) Oracle给你提供了默认的resource. 4 创建表,表信息的增删改,Oracle回收站 DDL 管理数据库的对象 表 视图 索引 序列 同义词 约束(..... ) oracle基于用户的管理方案 借助于管理工具可以方便 看到数据库各个对象.... 1 创建一个表 2个条件(1 有权限  2 有表空间) or

SQL之集合运算

UNION(并集)集合运算 1.UNION ALL集合运算 该集合运算返回在输入的多集中出现的所有行,它实际上不会对行进行比较,也不会删除重复行.假设查询Query1返回m行,查询Query2返回n行,则该集合运算后返回(m+n)行 1 SELECT country, region, city FROM HR.Employees 2 UNION ALL 3 SELECT country, region, city FROM Sales.Customers; 2.UNION DISTINCT集合运