4-1 jmu-ds-集合的并交差运算(15 分)

来源:互联网 发布:c语言do while 编辑:程序博客网 时间:2024/05/16 11:01

有两个整数集合A和B,现在要求实现集合的并、交、差运算。例如A={2,7,9} ,B={3,7,12,2},则集合的并C=A∪B={2,7,9,3,12},而集合的交 C=A∩B={2,7},集合的差C=A-B={9}。集合A和B中元素个数在1~100之间。

输入格式:

三行,第一行分别为集合A,B的个数
第二行为A集合的数据
第三行为B集合的数据

输出格式:

三行
第一行集合并的结果:C的个数及C中的元素
第二行集合交的结果:C的个数及C中的元素
第三行集合差的结果:C的个数及C中的元素
输出结果以元素在A集合中的先后顺序输出,不能改变数据的输出顺序

输入样例:

3 4
2 7 9
3 7 12 2

输出样例:

5 2 7 9 3 12
2 2 7
1 9




只得到10分,另外五分真心得不到QAQ



#include<iostream>#include<malloc.h>using namespace std;bool compare(int a, int b){    if(a == b)        return true;    else        return false;}int main(){    int n, m;    int *a, *b, *c, d[100];    cin >> n >> m;    a = new int[n];    b = new int[m];    c = new int[n + m];    for(int i = 0; i < n; i ++)    {        cin >> a[i];    }    for(int i = 0; i < m; i ++)    {        cin >> b[i];    }    for(int i = 0; i < n; i ++)        c[i] = a[i];    int i, k = 0, tmp = 0;    for( i = 0; i < m; i ++)    {        int flag = 0;        for(int j = 0; j < n; j ++)        {            if(compare(b[i],a[j]))            {                flag = 1;                tmp ++;            }        }        if(!flag)            c[i + n - tmp] = b[i];    }    cout << i + n - tmp;    for(int j = 0; j < n + i - tmp; j ++)        cout << " " << c[j];    cout << endl;    for(int i = 0; i < n; i ++)    {        for(int j = 0; j < m; j ++)        {            if(a[i] == b[j])            {                d[k] = a[i];                k ++;            }        }    }    cout << k;    for(int i = 0; i < k; i ++)        cout << " " << d[i];    cout << endl;    tmp = 0;    for(int i = 0; i < n; i ++)    {        int flag = 0;        for(int j = 0; j < k; j ++)        {            if(compare(a[i], d[j]))                flag = 1;        }        if(!flag)        {c[tmp] = a[i]; tmp ++;}    }    cout << tmp;    for(int i = 0; i < tmp; i ++)        cout << " " << c[i];}

原创粉丝点击