感谢您的帮助 2021-11-29 23:13 采纳率: 33.3%
浏览 937

用指针方法实现将两个有序的数组合并成一个有序数组

问题遇到的现象和发生背景

问题:用指针方法实现将两个有序的数组合并成一个有序数组

问题相关代码,请勿粘贴截图
运行结果及报错内容
#include<stdio.h>
#define N 20
int main()
{
    int t,a[N],b[N],c[N+N],*p,*q,*r,anum,bnum;
    scanf("%d",&anum);
    for(p=a;p<a+anum;p++)
    {
        scanf("%d",p);
    }
    scanf("%d",&bnum);
    for(q=b;q<b+bnum;q++)
    {
        scanf("%d",q);
    }
    for(p=a,q=b,r=c;p<a+anum,q<b+bnum,r<c+anum+bnum;r++)
    {
        if(*p>*q)
        {
            *r=*q;
            q++;
        }
        else
        {
            *r=*p;
            p++;
        }
    }
    if(p<a+anum&&q>=b+bnum)
    {
        for(p=a+bnum,r=c+2*bnum;p<a+anum,r<c+anum+bnum;p++,r++)
        {
            *r=*p;
        }
    }
    if(p>=a+anum&&q<b+bnum)
    {
        for(q=b+anum,r=c+2*anum;q<b+bnum,q<c+anum+bnum;q++,r++)
        {
            *r=*q;
        }
    }
    for(r=c;r<c+anum+bnum;r++)
    {
        printf("%d ",*r);
    }
    return 0;
}
输入:2
0 1
3
2 3 4
输出:
0 1 后面3个数都是很大的数。

我的解答思路和尝试过的方法
我想要达到的结果
  • 写回答

1条回答 默认 最新

  • qzjhjxj 2021-11-29 23:40
    关注

    修改如下,供参考:

    #include<stdio.h>
    #define N 20
    int main()
    {
        int t,a[N],b[N],c[N+N],*p,*q,*r,anum,bnum;
        scanf("%d",&anum);
        for(p=a;p<a+anum;p++)
        {
            scanf("%d",p);
        }
        scanf("%d",&bnum);
        for(q=b;q<b+bnum;q++)
        {
            scanf("%d",q);
        }
        for(p=a,q=b,r=c;p<a+anum && q<b+bnum ;)//,r<c+anum+bnum;r++)
        {
            if(*p>*q)
            {
                *r++=*q++;
                //q++;
            }
            else
            {
                *r++=*p++;
                //p++;
            }
        }
        if(p<a+anum)   //&&q>=b+bnum)
        {
            for(;p<a+anum;)//(p=a+bnum,r=c+2*bnum;p<a+anum,r<c+anum+bnum;p++,r++)
            {
                *r++=*p++;
            }
        }
        else if(q<b+bnum)  //p>=a+anum&&
        {
            for(;q<b+bnum;)//(q=b+anum,r=c+2*anum;q<b+bnum,q<c+anum+bnum;q++,r++)
            {
                *r++=*q++;
            }
        }
        for(r=c;r<c+anum+bnum;r++)
        {
            printf("%d ",*r);
        }
        return 0;
    }
    
    
    评论

报告相同问题?

问题事件

  • 创建了问题 11月29日

悬赏问题

  • ¥15 shape_predictor_68_face_landmarks.dat
  • ¥15 slam rangenet++配置
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题