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;
}