并集

问题:假设利用两个线性表LA和LB分别表示两个集合A和B(即:线性表中的数据元素即为集合中的成员),现要求一个新的集合A=A∪B。这就要求对线性表做如下操作:扩大线性表LA,将存在于线性表LB中而不存在于线性表LA中的数据元素插入到线性表LA中去。只要从线性表LB中依次取得每个元素,并依值在线性表LA中进行查访,若不存在,则插入之。上述操作过程可用下列算法描述之。

输入:有多组测试数据,每组测试数据占两行。第一行是集合A,第一个整数m(0

输出:每组测试数据输出n+2行:前两行分别输出集合A、集合B中的数据,后面n行是每次从B中取出元素插入到A尾部后的集合A。每行整数之间用一个空格隔开,每组测试数据之间用一行空行隔开。

样例输入:

5 1 5 2 6 3

3 1 7 9

1 3

2 2 7

4 2 5 1 4

4 1 2 4 5

样例输出:

1 5 2 6 3

1 7 9

1 5 2 6 3

1 5 2 6 3 7

1 5 2 6 3 7 9


3

2 7

3 2

3 2 7


2 5 1 4

1 2 4 5

2 5 1 4

2 5 1 4

2 5 1 4

2 5 1 4

代码1(数组):

#include

using namespace std;

int main(){

    int a[101],b[101],n,m;

    while(cin>>n){

        int i=0,j=0;

        for(i=0;i

            cin>>a[i];

        }

        cin>>m;

        for(j=0;j

            cin>>b[j];

        }

        for(i=0;i

            cout<

        }

        cout<

        for(i=0;i

            cout<

        }

        cout<

        for(i=0;i

            bool k=true;

            for(j=0;j

                if(b[i]==a[j]){

                    k=false;

                    break;

                }

            }

            if(k){

                //是a的最后一个

                a[n++]=b[i];

            }

            for(j=0;j

                cout<

            }

            cout<

        }

            cout<

    }

    return 0;

}

代码2:

#include

#include

using namespace std;

int main()

{

    set s1,s2;

    int  n,m,i,j,a;

    while(cin>>n){

        for(i=0;i

            cin>>a;

            s1.insert(a);

        }

        cin>>m;

        for(j=0;j

            cin>>a;

            s2.insert(a);

        }

        for(set::iterator it=s2.begin();it!=s2.end();it++){

            s1.insert((*it));

            for(set::iterator it1=s1.begin();it1!=s1.end();it1++){

                cout<<(*it1)<<" ";

            }

            cout<

        }

        cout<

    }

    return 0;

}

结果截图:


你可能感兴趣的:(并集)