E. 合并有序数组(指针)

44 阅读1分钟
E. 合并有序数组(指针)
题目描述

给出两个有序的数组,请使用指针将两个有序数组合并为一个有序数组,有多组测试用例,每组测试用例之前输出一个空行

 


输入

对于每组测试数据:

先输入第一个数组的大小a,然后跟着a个有序数字。

然后输入第二个数组的大小b,然后跟着b个有序数字。

 


输出

对于每组测试数据:

第一行输出合并数组的大小

第二行输出合并后的有序数组。有序数组中每个元素之间以一个空格分隔。

每组测试数据之间以一个空行分隔。


输入样例1 
5 1 1 2 3 5
4 1 2 3 4
输出样例1
9
1 1 1 2 2 3 3 4 5

 该题值得说的就是“注意格式”

#define _CRT_SECURE_NO_WARNINGS
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include <iomanip>
#include<cmath>
#include<cstring>
#include<cctype>
#include<queue>
using namespace std;
const int MAXN = 1000;
int num1[MAXN];
int num2[MAXN];
int ans[MAXN];
int a, b,sign=1;
int cn = 0;
int* p1 = num1;
int* p = ans;
int* p2 = num2;
int z = 0;

void bubble(int* num1, int* num2, int a, int b)
{
	for (z = 0; z < a; z++)
	{
		*(p + z) = *(p1 + z);
	}
	int j = 0;
	for (; z < a + b; z++)
	{
		*(p + z) = *(p2 + j);
		j++;
	}

	for (int i = 1; i < a + b; i++)
	{
		for (int j = 0; j < a + b - i; j++)
		{
			if (*(p + j) > *(p + j + 1))
			{
				swap(ans[j], ans[j + 1]);
			}
		}
	}

}
int main()
{
	while (cin>>a)
	{
		sign = 1;
		for (int i = 0; i < a; i++)
		{
			cin >> num1[i];
		}
		cin >> b;
		for (int j = 0; j < b; j++)
		{
			cin >> num2[j];
		}

		bubble(num1, num2, a, b);
		cout << a + b << endl;
		for (int i = 0; i < a + b; i++)
		{
			if (sign)
			{
				cout << ans[i];
				sign = 0;
			}
			else
			{
				cout << ' ' <<ans[i];
			}
		}
		cout << endl << endl;;
	}


	return 0;
}