「已注销」 2023-10-03 00:03 采纳率: 62.5%
浏览 8
已结题

zzulioj1124两个有序数组合并这么写为啥编译不报错但是不输出任何东西呢?

题目描述
已知数组a中有m个按升序序排列的元素,数组b中有n个降序排列的元素,编程将a与b中的所有元素按降序存入数组c中。

输入
输入有两行,第一行首先是一个正整数m,然后是m个整数;第二行首先是一个正整数n,然后是n个整数,m, n均小于等于1000000。

输出
输出合并后的m+n个整数,数据之间用空格隔开。输出占一行。

样例输入 Copy
4 1 2 5 7
3 6 4 2
样例输出 Copy
7 6 5 4 2 2 1

#include<stdio.h>
int main()
{
    int a[1000000]={0},b[1000000]={0},m,n,i,j,t;
    scanf("%d",&m);
    for(i=1;i<=m;i++)
    {
        scanf("%d",&a[i]);
    }
    scanf("%d",&n);
    for(i=1;i<=n;i++)
    {
        scanf("%d",&b[i]);
    }
    int c[m+n]; 
    for(i=1;i<=m+n;i++)
    {
        if(i<=m)
        {
            for(i=1;i<=m;i++)
            {
                c[i]=a[i];
            }
        }
        else if(i>m&&i<=m+n)
        {
            for(i=m+1;i<=m+n;i++)
            {
                c[i]=b[i-m];
            }
        }
    }
    for(i=1;i<=m+n;i++)
    {
        for(j=i;j<=m+n;j++)
        {
        if(c[i]<=c[j])
        {
            t=c[i];
            c[i]=c[j];
            c[j]=t;
            }    
        }
    }
    for(i=1;i<=m+n;i++)
    {
        printf("%d ",c[i]);
    }
    return 0;
}


  • 写回答

2条回答 默认 最新

  • qzjhjxj 2023-10-03 12:10
    关注

    供参考:

    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int m, *a, n, *b, *c, i, j, k;
    
        scanf("%d", &m);          // 输入数组 a
        a = (int *)malloc(sizeof(int)*m);
        for (i = 0;i < m; i++)
            scanf("%d", &a[i]);
    
        scanf("%d", &n);         // 输入数组 b
        b = (int *)malloc(sizeof(int)*n);
        for (i = 0;i < n;i++)
            scanf("%d", &b[i]);
    
        c = (int *)malloc(sizeof(int)*(m+n));
        i = m - 1 ,j = 0, k = 0; // 合并
        while (i >= 0 && j < n){
            if (a[i] > b[j])
                c[k++] = a[i--];
            else
                c[k++] = b[j++];
        }
        while (i >= 0)
             c[k++] = a[i--];
        while (j < n)
             c[k++] = b[j++];
    
        for (i = 0;i < m + n; i++)    // 输出合并后数组 c
            printf(i ? " %d" : "%d", c[i]);
        free(a);
        free(b);
        free(c);
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月16日
  • 已采纳回答 10月8日
  • 创建了问题 10月3日