• 试题 算法训练 集合运算


    问题描述
      给出两个整数集合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
     
    方法一:利用STL中set有序性与查找函数实现
    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <set>
    #include <vector>
     
    #define ci cin.tie(0)
    #define ios ios::sync_with_stdio(false)
    #define fi first
    #define se second
    
    using namespace std;
    
    typedef long long LL;
    typedef pair<int, int> PII;
    
    const int N = 1010;
    
    int n, m, x;
    set<int> a, b, unio;
    vector<int> inter, resi;
    
    int main()
    {
        ci;ios;
         cin >> n;
         for (int i = 0; i < n; i ++ )
         {
             cin >> x;
             a.insert(x);
         }
         cin >> m;
         for (int i = 0; i < m; i ++ )
         {
             cin >> x;
             b.insert(x);
         }
         
         // 交集
        set<int>::iterator it;
        for (it = a.begin(); it != a.end(); it ++ )
        {
            if (b.find(*it) != b.end()) inter.push_back(*it);
        } 
        
        // 交集
        for (it = a.begin(); it != a.end(); it ++ )
            unio.insert(*it);
        for (it = b.begin(); it != b.end(); it ++ )
            unio.insert(*it);
            
        // 余集
        for (it = a.begin(); it != a.end(); it ++ )
        {
            if (b.find(*it) == b.end()) resi.push_back(*it);
        } 
        
        // 打印答案
        for (int i = 0; i < inter.size(); i ++ )
            cout << inter[i] << ' ';
        cout << endl;
        for (it = unio.begin(); it != unio.end(); it ++ )
            cout << *it << ' ';
        cout << endl;
        for (int i = 0; i < resi.size(); i ++ )
            cout << resi[i] << ' ';
        cout << endl;
        return 0;
    }

    方法二:利用自带函数求解

    #include <iostream>
    #include <algorithm>
    #include <cstring>
    #include <cstdio>
    #include <set>
    #include <vector>
     
    #define ci cin.tie(0)
    #define ios ios::sync_with_stdio(false)
    #define fi first
    #define se second
    
    using namespace std;
    
    typedef long long LL;
    typedef pair<int, int> PII;
    
    const int N = 1010;
    
    int n, m, x;
    vector<int> a, b, c;
    
    void print(vector<int> &c)
    {
        for (int i = 0; i < c.size(); i ++ )
            cout << c[i] << ' ';
        c.clear();
        cout << endl;
    }
    
    int main()
    {
        ci;ios;
        cin >> n;
        for (int i = 0; i < n; i ++ )
        {
            cin >> x;
            a.push_back(x);
        }
        sort(a.begin(), a.end());
        cin >> m;
        for (int i = 0; i < m; i ++ )
        {
            cin >> x;
            b.push_back(x);
        }
        sort(b.begin(), b.end());
        set_intersection(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c));
        print(c);
        set_union(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c));
        print(c);
        set_difference(a.begin(), a.end(), b.begin(), b.end(), back_inserter(c));
        print(c);
        return 0;
    }

     转载自博客https://blog.csdn.net/qq_41979513/article/details/103191842

  • 相关阅读:
    【转】Scala基础知识
    Python知识之 方法与函数、偏函数、轮询和长轮询、流量削峰、乐观锁与悲观锁
    jQuery Ajax async=>false异步改为同步时,导致浏览器假死的处理方法
    Django框架之DRF APIView Serializer
    Python之虚拟环境virtualenv、pipreqs生成项目依赖第三方包
    celery 分布式异步任务框架(celery简单使用、celery多任务结构、celery定时任务、celery计划任务、celery在Django项目中使用Python脚本调用Django环境)
    微信推送功能实现
    Haystack搜索框架
    支付宝支付
    Redis初识01 (简介、安装、使用)
  • 原文地址:https://www.cnblogs.com/zbx2000/p/12711123.html
Copyright © 2020-2023  润新知