C程序——教官的任务

问题描述

小伦同学在新生军训期间因为高中时期突出的编程能力被ACM基地发掘到了,在组织的帮助下他可以实现免军训进而参加基地进行的亚洲区域赛。因此他向教官打了个报告后,准备开溜,这时教官要求他编程实现以下任务才能离开连队:现有两个数组 A 和 B,数组 A 是升序排序的有序数组,数组 B 是降序排序的有序数组,要求把这两个数组合并为一个升序排序的有序数组。面对这样的任务,想必你也能轻而易举解决吧!

输入

第一行输入 N(1 <= N <= 100) 和 M(1 <= M <= 100),分别代表数组 A 和 B 的长度。
第二行输入 N 个数,代表数组 A 。
第三行输入 M 个数,代表数组 B 。

输出

输出一行合并后的数组。

输入范例

3 4 2 3 5 6 4 2 1

输出范例

1 2 2 3 4 5 6

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <math.h>

#define N 200
#define M 100

void solve(int *p,int num,int n,int i)//插入数字函数 
{
    for (int k = n; k > i; k--)
    {
        p[k] = p[k-1];
    }
    p[i] = num;
}
int main( ) 
{
    int n, m, l = 0;
    int arr_1[N] = {0};
    int arr_2[M] = {0};
    
    scanf("%d%d",&n,&m);
    
    //输入数据 
    for(int i = 0; i < n; i++)
        scanf("%d",&arr_1[i]);
    for(int j = 0; j < m; j++)
        scanf("%d",&arr_2[j]);
        
    for(int j = m-1; j >=0 ; j--)
    {
        for(int i = l; i < n; i++)
        {
            if (arr_2[j] <= arr_1[i])
            {
                l = i;
                solve(arr_1,arr_2[j],n,i);//调用函数,把数组2的数据插入到数组1中 
                n++;//数组1中每加入一个数字,n+1 
                break;//避免重复插入 
            }
            if( i == n-1)
            {
                    arr_1[n] = arr_2[j];//在数组1尾部加入数组2的大于数组1最大的数的数 
                    n++;
                    break;
            }
        }
    }
    
    for(int i = 0; i < n; i++)
        printf ("%d ",arr_1[i]);
    
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_40788199/article/details/82560637