正文
华为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;
}