华为OJ平台试题 ——数组:整形数组合并


代码:

/*
 * 将两个整型数组依照升序合并,而且过滤掉反复数组元素
 */

#include <stdio.h>

#define  N 256
#define  M 512

/*
 * 合并数组。删除反复的,并排序
 */

int CombineBySort(int Array1[], int iArray1Num,int Array2[], int iArray2Num,int OutputArray[], int  iOutputNum)
{
	int i, j,t;
	int tmp;

	iOutputNum = 1;

	OutputArray[0] = Array1[0];

	/* 将数组1 复制给输出数组,并去掉同样的数字 */
	for( t = 1; t < iArray1Num; t++)
	{
		for(i = 0; i < iOutputNum; i++ )
		{
			if(OutputArray[i] == Array1[t] ) break;
			else if  (OutputArray[i] != Array1[t] && ( i == iOutputNum - 1 ) )
			{
				OutputArray[iOutputNum] = Array1[t];
				iOutputNum++;
			}
		
		}
		
	}
	
	/* 将数组2中的每一个数与数组1中的进行比較假设不同。则增加到输出数组,假设同样,退出 */
	for(  i = 0; i < iArray2Num; i++ )
	{
		for( j = 0; j < iOutputNum; j++ )
		{
			if( OutputArray[j]  == Array2[i] ) break;
			else if( OutputArray[j]  != Array2[i] &&  j == (iOutputNum - 1)  )
			{
					OutputArray[iOutputNum] =  Array2[i];	
					iOutputNum++;
			}

		}
	
	}

	
	/* 进行排序 */
	for(i = 0; i < iOutputNum; i++ )
	{
		for( j = i; j < iOutputNum; j++)
		{
			if( OutputArray[i] > OutputArray[j])
			{
				tmp = OutputArray[i];
				OutputArray[i] = OutputArray[j];
				OutputArray[j] = tmp;				
			}
		
		}
	}


	return iOutputNum;
}




int main(void)
{
	int  Array1Num, Array2Num, OutputNum = 0; /* Array1Num 第一个数组元素个数, Array2Num 第二个数组元素个数 */
	
	int  aArray1[N]= {0}, aArray2[N]= {0}, aOutputArray[M]= {0};
	
	int  i, j, k;

	scanf("%d", &Array1Num);
	for(i = 0; i < Array1Num; i++)
	{
		scanf("%d", &aArray1[i] );	
	}

	scanf("%d", &Array2Num);
	for( j = 0; j < Array2Num; j++)
	{
		scanf("%d", &aArray2[j] );	
	}
		
	OutputNum = CombineBySort(aArray1, Array1Num, aArray2, Array2Num, aOutputArray, OutputNum);

	for(k = 0; k < OutputNum; k++)
	{
		printf("%d", aOutputArray[k]);
	}
		
	return 0;
}


原文地址:https://www.cnblogs.com/gccbuaa/p/6949837.html