L_D.M. 2024-05-11 21:29 采纳率: 33.3%
浏览 95

并集与交集(C++)

并集与交集(C++,求解)
描述

小鱼同学学习了并集和交集的概念。
(1)数组的并集:给定两个数组A,B ,把他们所有的元素合并在一起,并按照从小到大排序组成的集合,叫做数组A与数组B的并集;比如:数组{1,2,3}和{2,3,4}的并集是{1,2,3,4}。
(2)数的交集:给定两个数组 A,B,由所有属于数组 A 且属于数组B 的元素,并按照从小到大排序组成的集合,所组成的集合,叫做集合A与集合B的交集;比如:数组{1,2,3}和{2,3,4}的交集为{2,3}。
现给定2个数组,每个数组都含有若干不重复的元素,请分别求出两个数组的并集和交集(测试数据确认两个集合一定有交集)。

输入描述

第一行有两个整数m 和 n(m,n 都是10∼1000之间的整数),分别代表A,B 两个数组的长度。
第二行有m个整数,代表A数组存储的整数,用空格隔开。
第三行有n个整数,代表B数组存储的整数,用空格隔开。
注:两个集合的数都是大于等于0小于等于10000的整数。

输出描述

第一行输出两个数组的并集,用空格隔开这些元素。
第二行输出两个数组的交集,用空格隔开这些元素。

用例输入 1

3 4
2 1 3
5 4 3 2
用例输出 1

1 2 3 4 5
2 3

这里就很无语,他怎么改都是RE,所以就来了。
希望有人帮我改改

#include <iostream>
#include <algorithm>
using namespace std;
int n,m,a[1010],b[1010],bing[1010],jiao[1010],idx = 0;

int main(){
    cin >> n >> m;
    for(int i = 1;i <= n;i ++) cin >> a[i];
    for(int i = 1;i <= m;i ++) cin >> b[i];
    
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= m;j ++){
            if(a[i] != a[j]){
                bing[++ idx] = a[i];
                bing[++ idx] = b[j];
            }
            else{
                bing[++ idx] = a[i];
            }
        }
    }
    sort(bing + 1,bing + 1 + idx);
    for(int i = 1;i <= idx;i ++) if(bing[i] != bing[i - 1]) cout << bing[i] << " ";
    cout << endl;
    idx = 0;
    for(int i = 1;i <= n;i ++){
        for(int j = 1;j <= m;j ++){
            if(a[i] == b[j]) jiao[++ idx] = a[i];
        }
    }
    sort(jiao + 1,jiao + 1 + idx);
    for(int i = 1;i <= idx;i ++){
        if(jiao[i] != jiao[i - 1]) cout << jiao[i] << " ";
    }
    
    return 0;
}

  • 写回答

3条回答 默认 最新

  • 笑面虎 2024-05-11 21:29
    关注

    以下内容由CHATGPT及笑面虎共同生成、有用望采纳:


    【您想要解决的问题】:您提问的目的是想要解决一个C++编程问题,具体来说,是实现两个整数数组的并集与交集的计算,并按照从小到大的顺序输出结果。

    【问题出现原因】:根据您提供的代码和描述,问题可能出现的原因有:

    1. 代码中存在逻辑错误,导致并集和交集的计算不准确。
    2. 代码中数组索引可能存在问题,因为通常数组索引是从0开始的,而您的代码中使用了从1开始的索引。
    3. 代码中没有考虑到去重的问题,这可能会导致并集中出现重复的元素。

    【问题解决方案】:为了解决这个问题,我们需要重新审视并实现并集和交集的计算逻辑,并确保结果中没有重复的元素。

    【提供代码】:以下是修改后的代码,它应该能够正确计算并集和交集,并且去重:

    #include <iostream>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    int main() {
        int n, m;
        cin >> n >> m;
        vector<int> a(n), b(m), bing, jiao;
        
        // 读取数组A和B的元素
        for (int i = 0; i < n; i++) cin >> a[i];
        for (int i = 0; i < m; i++) cin >> b[i];
        
        // 计算并集
        bing.insert(bing.end(), a, a + n);
        bing.insert(bing.end(), b, b + m);
        sort(bing.begin(), bing.end());
        bing.erase(unique(bing.begin(), bing.end()), bing.end());
        
        // 输出并集
        for (int num : bing) cout << num << " ";
        cout << endl;
        
        // 计算交集
        for (int i = 0; i < n; i++) {
            auto it = find(b, b + m, a[i]);
            if (it != b + m) jiao.push_back(a[i]);
        }
        
        // 输出交集
        sort(jiao.begin(), jiao.end());
        jiao.erase(unique(jiao.begin(), jiao.end()), jiao.end());
        for (int num : jiao) cout << num << " ";
        
        return 0;
    }
    

    【代码运行方式】:您需要将这段代码复制到C++的编译环境中,比如Visual Studio、GCC或者任何支持C++的IDE。然后编译并运行程序,输入相应的测试数据,程序会输出并集和交集的结果。

    【代码预期运行结果】:

    3 4
    2 1 3
    5 4 3 2
    

    预期输出:

    1 2 3 4 5 
    2 3
    

    【推荐相关链接】:

    • cplusplus.com:提供C++教程和参考。
    • Stack Overflow:一个编程问答网站,可以搜索类似问题或提问。
    • GeeksforGeeks:提供算法和数据结构的教程,以及C++编程解决方案。
    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 5月11日