1323:算法2-1:集合union

題目描述

假設利用兩個線性表LA和LB分別表示兩個集合A和B(即:線性表中的數據元素即爲集合中的成員),現要求一個新的集合A=A∪B。這就要求對線性表做如下操作:擴大線性表LA,將存在於線性表LB中而不存在於線性表LA中的數據元素插入到線性表LA中去。只要從線性表LB中依次取得每個元素,並依值在線性表LA中進行查訪,若不存在,則插入之。上述操作過程可用下列算法描述之。
圖:將兩個列表合併的算法(C/C++描述)

上圖算法中,在第8行取得集合B中的元素,然後再在第10行插入到集合A中。你的任務是先輸出集合A和集合B中的元素,每個集合在一行中輸出。然後每次在將集合B中的元素取出插入到集合A尾部後輸出集合A中的元素。當然你的代碼可以和上面的代碼不一樣,只要有相同的輸出即可。

輸入格式

有多組測試數據,每組測試數據佔兩行。第一行是集合A,第一個整數m0<m<=100)代表集合A起始有m個元素,後面有m個整數,代表A中的元素。第二行是集合B,第一個整數n(0<n<=100)代表集合B起始有n個元素,後面有n個整數,代表B中的元素。每行中整數之間用一個空格隔開。

輸出

每組測試數據輸出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

#include <stdio.h>
int main()
{
    int a[200], b[100];       
    int m, n;                   
    int i, j, d=0;          
    while(scanf("%d", &m)!= EOF)
    {
        if(d++)
            putchar('\n');
        for(i=0;i<m;i++)
            scanf("%d", &a[i]);
        scanf("%d", &n);
        for(i=0;i<n;i++)
            scanf("%d", &b[i]);
        for(i=0;i<m;i++)
        {
            if(i)
                putchar(' ');
            printf("%d", a[i]);
        }
        putchar('\n');
        for(i=0;i<n;i++)
        {
            if(i)
                putchar(' ');
            printf("%d", b[i]);
        }
        putchar('\n');
        for(i=0;i<n;i++)
        {
            for(j=0;j<m;j++)
                if(b[i]==a[j])
                    break;
            if(j >= m)
            {
                a[m] = b[i];
                m++;
            }
            for(j=0;j<m;j++)
            {
                if(j)
                    putchar(' ');
                printf("%d", a[j]);
            }
            putchar('\n');
        }
    }
    return 0;
}



 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章