C++ 实现整数集合类:并集、交集运算

**问题描述:**实现整数集合类。

类的定义在前缀中,主函数在后缀中。请补全没有定义的成员函数。

说明:

  1. 类中含两个私有变量,分别表示集合中元素的个数和集合中元素组成的数组。
  2. Set 函数输入,Show 函数输出结果(按从小到大的顺序输出各个元素)。
  3. 实现运算符 + 的重载,表示两个集合的并集。
  4. 实现运算符 - 的重载,表示两个集合的交集。

提示:

  1. 集合中不可出现重复元素。
  2. 空集时,输出 empty

输入输出样例1

输入

3 (表示第一个集合的元素个数)
1 2 3 (表示第一个集合的所有元素)
4 (表示第二个集合的元素个数)
1 2 5 6 (表示第二个集合的所有元素)

输出

1 2 3 5 6 (两个集合的并集)
1 2 (两个集合的交集)

输入输出样例2

输入

3
1 2 3
3
1 2 3

输出

1 2 3
1 2 3

前缀代码:

#include<iostream>
using namespace std;
class Cassemblage
{
private :
	int n;
    int a[1000];
public :
    void Set(int a1[] ,int n1)
    {
        n=n1;
        for(int i=0;i<n;i++)
        {
            a[i]=a1[i];
        }
    }
    Cassemblage operator+(Cassemblage z);
    Cassemblage operator-(Cassemblage z);
    void Show()
    {
        int  i,j,t;
        if(n>0)
        {
            for (i=0;i<n;i++)
            {
                for(j=i;j<n;j++)
                {
                    if(a[i]>a[j])
                    {
                        t=a[i];
                        a[i]=a[j];
                        a[j]=t;
                    }
                }
            }
            for(i=0;i<n;i++)
            {
                cout<<a[i]<<' ';
            }
        }
        else
        {
            cout<<'empty';
        }
    }
};

后缀代码:

int main( )
{
    Cassemblage z1, z2, x3;
    int i, n1, n2, a1[1000], a2[1000];
    cin >> n1;
    for(i=0; i<n1; i++)
    {
        cin >> a1[i];
    }
    z1.Set(a1, n1);

    cin >> n2;
    for(i=0; i<n2; i++)
    {
        cin >> a2[i];
    }
    z2.Set(a2, n2);

    x3=z1+z2;
    x3.Show();
    cout << endl;

    x3=z1-z2;
    x3.Show();
    return 0;
}

参考答案:

#include<iostream>
using namespace std;
class Cassemblage
{
private :
    int n;
    int a[1000];
public :
    void Set(int a1[] ,int n1)
    {
        n=n1;
        for(int i=0;i<n;i++)
        {
            a[i]=a1[i];
        }
    }
    void Show()
    {
        int  i,j,t;
        if(n>0)
        {
            for (i=0;i<n;i++)
            {
                for(j=i;j<n;j++)
                {
                    if(a[i]>a[j])
                    {
                        t=a[i];
                        a[i]=a[j];
                        a[j]=t;
                    }
                }
            }
            for(i=0;i<n;i++)
            {
                cout<<a[i]<<' ';
            }
        }
        else
        {
            cout<<'empty';
        }
    }
    Cassemblage operator+(Cassemblage z)
    {
        Cassemblage temp;
        int i=0,j=0,k=0;
        while(i<n&&j<z.n)
        {
            if(a[i]<z.a[j])
            {
                temp.a[k++]=a[i++];
            }
            else if(a[i]>z.a[j])
            {
                temp.a[k++]=z.a[j++];
            }
            else
            {
                temp.a[k++]=a[i++];
                j++;
            }
        }
        while(i<n)
        {
            temp.a[k++]=a[i++];
        }
        while(j<z.n)
        {
            temp.a[k++]=z.a[j++];
        }
        temp.n=k;
        return temp;
    }
    Cassemblage operator-(Cassemblage z)
    {
        Cassemblage temp;
        int i=0,j=0,k=0;
        while(i<n&&j<z.n)
        {
            if(a[i]<z.a[j])
            {
                i++;
            }
            else if(a[i]>z.a[j])
            {
                j++;
            }
            else
            {
                temp.a[k++]=a[i++];
                j++;
            }
        }
        temp.n=k;
        return temp;
    }
};
int main( )
{
    Cassemblage z1, z2, x3;
    int i, n1, n2, a1[1000], a2[1000];
    cin >> n1;
    for(i=0; i<n1; i++)
    {
        cin >> a1[i];
    }
    z1.Set(a1, n1);

    cin >> n2;
    for(i=0; i<n2; i++)
    {
        cin >> a2[i];
    }
    z2.Set(a2, n2);

    x3=z1+z2;
    x3.Show();
    cout << endl;

    x3=z1-z2;
    x3.Show();
    return 0;
}
C++ 实现整数集合类:并集、交集运算

原文地址: https://www.cveoy.top/t/topic/oOUv 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录