Problem 1215 # 教官的任务

问题描述

 

小伦同学在新生军训期间因为高中时期突出的编程能力被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

 两个数组,一升一绛,升序序列从前往后依次与降序序列从后往前比较,小的写出第三个数组

AC代码:


#include<stdio.h>
int main()
{
    int a[102]={0};
    int b[102]={0};
    int c[204]={0};
    int n;
    int m;
    int sum;
    int j;
    int i;
    int k;
    while(scanf("%d %d",&n,&m)!=EOF){
        sum=m+n;
        for(i=0;i<n;i++)
            scanf("%d",&a[i]);
        for(j=0;j<m;j++)
            scanf("%d",&b[j]);
        i=0;
        j=m-1;
        for(k=0;k<sum;k++){
            if(i==n)
                c[k]=b[j--];
            else if(j==-1)
                c[k]=a[i++];
            else if(a[i]<=b[j]){
                c[k]=a[i];
                i++;
            }
            else if(a[i]>=b[j]){
                c[k]=b[j];
                j--;
            }
        }
        for(k=0;k<sum-1;k++)
            printf("%d ",c[k]);
        printf("%d\n",c[k]);
    }
    return 0;
}


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值