时间限制:1000MS 代码长度限制:10KB
提交次数:5339 通过次数:2251
题型: 编程题 语言: G++
Description
若线性表中数据元素相互之间可以比较,且数据元素在表中按值递增或递减,则称该表为有序表。 编写算法,将两个非递减有序顺序表A和B合并成一个新的非递减有序顺序表C。
输入格式
第一行:顺序表A的元素个数 第二行:顺序表A的各元素(非递减),用空格分开 第三行:顺序表B的元素个数 第四行:顺序表B的各元素(非递减),用空格分开
输出格式
第一行:顺序表A的元素列表 第二行:顺序表B的元素列表 第三行:合并后顺序表C的元素列表
输入样例
5 1 3 5 7 9 5 2 4 6 8 10
输出样例
List A:1 3 5 7 9 List B:2 4 6 8 10 List C:1 2 3 4 5 6 7 8 9 10
提示
输出时注意大小写和标点。
作者
yqm
Version:
1
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<iostream>
#include<malloc.h>
using namespace std;
int m,n;
void Merge(int* a, int* b)
{
int i, k=0, longa=0, longb=0;
cout << "List C:";
while (k != (m + n)) {
if (longa == m) {
while (longb != n) {
printf("%d ", b[longb]);
k++;
longb++;
if (k == (m + n)) break;
}
if (k == (m + n)) break;
}
if (longb == n) {
while (longa != m) {
printf("%d ", a[longa]);
k++;
longa++;
if (k == (m + n)) break;
}
if (k == (m + n)) break;
}
if (a[longa] < b[longb]) {
printf("%d ", a[longa]);
k++;
longa++;
}
else if(a[longa] > b[longb])
{
printf("%d ", b[longb]);
k++;
longb++;
}
else if (a[longa] == b[longb])
{
printf("%d ", a[longa]);
k++;
longa++;
}
}
}
int main()
{
int a[1000], b[1000];
int i,j;
cin >> m;
for (i = 0; i < m; i++)
cin >> a[i];
cin >> n;
for (i = 0; i < n; i++)
cin >> b[i];
cout << "List A:" ; for (i = 0; i < n; i++) cout << a[i] << " "; cout << endl;
cout << "List B:" ; for (i = 0; i < m; i++) cout << b[i] << " "; cout << endl;
Merge(a, b);
}