【问题描述】
从标准输入中输入两组整数(每行不超过20个整数,同数组中元素有可能重复)。合并两组整数,去掉在两组整数中同时都存在的整数,并按从大到小顺序排序输出(即两组整数集异或)。
【输入形式】
首先输入第一组整数的个数,然后在下一行输入第一组整数,以一个空格分隔各个整数;然后以同样的方式输入第二组整数。
【输出形式】
按从大到小顺序排序输出合并后的整数集(去掉在两组整数中都出现的整数,以一个空格分隔各个整数)。
【样例输入】
9
5 1 4 32 872 9 -6 32 872
10
1 5 2 87 10 1 9 5 1 10
【样例输出】
872 872 87 32 32 10 10 4 2 -6
【样例说明】
第一组整数有9个,分别为:5 1 4 32 872 9 -6 32 872。第二组整数有10个,分别为1 5 2 87 10 1 9 5 1 10。将第一组和第二组整数合并(去掉在两组整数中都出现的整数5、1和9),
并从大到小顺序排序后结果为872 872 87 32 32 10 10 4 2 -6
【运行结果如下】
【代码如下】
#include<stdio.h>
typedef void Status;
/*初始化数组*/
Status InitArray(int ch[],int len)
{
int i;
for (i = 0; i < len; i++)
scanf("%d",&ch[i]);
}
/*排序*/
Status Sort(int ch[],int len)
{
int i, j,temp;
for (i = 0; i < len; i++)
for (j = 0; j < len-i-1; j++)
if (ch[j] < ch[j+1])
{
temp = ch[j];
ch[j] = ch[j+1];
ch[j+1] = temp;
}//if
}
/*输出*/
Status Output(int ch[],int len)
{
int i;
for (i = 0; i < len; i++)
printf("%d ",ch[i]);
}
/*合并*/
Status MgArray(int ch1[],int ch2[],int len1,int len2)
{
int ch3[40];
int i, j;
int k = 0;
/*两个数组的元素进行逐个比较,没有相同元素出现,则添加到第三个数组中*/
for (i = 0; i < len1; i++)
for (j = 0; j < len2; j++)
{
if (ch1[i] == ch2[j]) break; //数组元素相同,结束内循环
if ((ch1[i] != ch2[j]) && (j == (len2-1)))
ch3[k++] = ch1[i]; //没有出现相同元素,添加到第三个数组
}//for1
for (j = 0; j < len2; j++)
for (i = 0; i < len1; i++)
{
if (ch1[i] == ch2[j]) break;
if ((ch1[i] != ch2[j]) && (i == (len1-1)))
ch3[k++] = ch2[j];
}//for2
Sort(ch3,k); //对数组元素进行降序排序
Output(ch3,k);
}
int main()
{
int len1, len2;
int ch1[20];
int ch2[20];
scanf("%d",&len1);
InitArray(ch1,len1);
scanf("%d",&len2);
InitArray(ch2,len2);
MgArray(ch1,ch2,len1,len2);
return 0;
}
本文章仅供学习和参考!
欢迎交流~