【问题描述】
从标准输入中输入两组整数(每组不超过20个整数,每组整数中元素不重复),合并两组整数,重复的整数只出现一次,并按从小到大顺序排序输出(即两组整数集的“并集”)。
【输入形式】
首先输入两组整数的个数,以一个空格分隔;然后在下面两行上分别输入两组整数,以一个空格分隔各个整数。
【输出形式】
按从小到大顺序排序输出合并后的整数集(以一个空格分隔各个整数,最后一个整数后的空格可有可无)。
【样例输入】
8 5
5 105 4 32 8 7 9 -60
5 2 87 10 105
【样例输出】
-60 2 4 5 7 8 9 10 32 87 105
【样例说明】
第一组整数有8个,分别为5 105 4 32 8 7 9 -60,第二组整数有5个,分别为5 2 87 10 105。将第一组和第二组整数合并(在两组整数中都出现的整数5和105只出现一次),并按从小到大顺序排序后结果为-60 2 4 5 7 8 9 10 32 87 105。
【评分标准】该题要求输出两组整数的并集,共有5个测试点,提交程序文件名为or.c。
#include <stdio.h>
int main()
{
int arr[40],arr1[20],arr2[20],OneLen,TwoLen,sumLen,i,position=0,j;
scanf("%d",&OneLen);
scanf("%d",&TwoLen);
for(i=0;i<OneLen;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<TwoLen;i++)
{
scanf("%d",&arr1[i]);
}
sumLen=OneLen+TwoLen;
for(i=0;i<TwoLen;i++)
{
arr[OneLen+i]=arr1[i];
}
for(i=0;i<sumLen;i++)
{
int exit=0;
for(j=0;j<position;j++)
{
if(arr[i]==arr2[j])
{
exit=1;
}
}
if(exit==0)
{
arr2[position]=arr[i];
position++;
}
}
for(i=0;i<position-1;i++)
{
for(j=0;j<position-1-i;j++)
{
if(arr2[j]>arr2[j+1])
{
int t = arr2[j];
arr2[j] = arr2[j+1];
arr2[j+1] = t;
}
}
}
for(i=0;i<position;i++)
{
printf("%d ",arr2[i]);
}
printf("\n");
return 0;
}