2021-11-07 两数组的合并排序

【问题描述】

从标准输入中输入两组整数(每行不超过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;
} 

本文章仅供学习和参考!

欢迎交流~

Guess you like

Origin blog.csdn.net/m0_58489132/article/details/121189628