仅供参考,共同进步。

山科日记—编写函数unionSet(编程题)

Description

编写一个函数unionSet,对2个集合求并集。其原型为:

int unionSet(int setA[],int setB[],int numA,int numB);

其中setAsetB是两个待合并的集合,numAnumB分别是2个集合的元素个数。该函数将两个集合合并后,放在数组setA中,返回值为并集中的元素个数。

Input

输入为2行,每行是一个集合,每行的输入以数值0作为结束,个数不超过100个。2个集合合并后的元素取值均在[1,100]内。

Output

输出2个集合求并后的结果,两两之间用一个空格隔开。输出时,先输出第一个集合中的元素,再输出从第2个集合中合并过来的元素。见样例。

Sample Input

1 2 3 4 5 7 0

2 4 6 8 19 0

Sample Output

1 2 3 4 5 7 6 8 19

HINT

Append Code

append.c,

int main()

{

    int setA[101],setB[101],numA,numB,i;

    numA=numB=0;

    scanf("%d",&setA[numA]);

    while (setA[numA]!=0)

    {

        numA++;

        scanf("%d",&setA[numA]);

    }

    scanf("%d",&setB[numB]);

    while (setB[numB]!=0)

    {

        numB++;

        scanf("%d",&setB[numB]);

    }

    numA=unionSet(setA,setB,numA,numB);

    printf("%d",setA[0]);

    for (i=1; i<numA; i++)

        printf(" %d",setA[i]);

    return 0;

}

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
int unionSet(int setA[],int setB[],int numA,int numB)
{
    int num[1000];
    int i, t=0, j;
    for(i=0;i<numB;i++)
    {
        t=0;
        for(j=0;j<numA;j++)
        {
            if(setA[j]==setB[i])
                t++;
        }
        if(t==0)
        {
             setA[numA++]=setB[i];
        }


    }

    return numA;


}
int main()
{
    int setA[101],setB[101],numA,numB,i;
    numA=numB=0;
    scanf("%d",&setA[numA]);
    while (setA[numA]!=0)
    {
        numA++;
        scanf("%d",&setA[numA]);
    }
    scanf("%d",&setB[numB]);
    while (setB[numB]!=0)
    {
        numB++;
        scanf("%d",&setB[numB]);
    }
    numA=unionSet(setA,setB,numA,numB);
    printf("%d",setA[0]);
    for (i=1; i<numA; i++)
        printf(" %d",setA[i]);
    return 0;
}

  

posted @ 2018-01-16 21:23  南山i  阅读(230)  评论(0编辑  收藏  举报