渃水73 2022-07-02 00:07 采纳率: 100%
浏览 237
已结题

通过调用reverse()函数将数组中指定范围内的元素按逆序重新放置

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

程序功能是通过调用reverse()函数将数组中指定范围内的元素按逆序重新放置

问题相关代码,请勿粘贴截图

#include <stdio.h>
#define N 10
void reverse(int p, int a, int b)
{
int m,i,j,t;
m=(b-a)/2;
for(i=a;i<=m;i++)
{
j=b-i;
t=
(p+i);
(p+i)=(p+j);
*(p+j)=t;
}
}
int main()
{
int a[N], i, begin, end;
for (i=0; i<N; i++)
scanf("%d",&a[i]);
scanf("%d%d",&begin,&end);
reverse(a, begin, end);
for (i=0; i<N; i++)
printf("%d ",a[i]);
printf("\n");
return 0;
}

运行结果及报错内容

测试输入:
1 5 3 4 8 0 6 9 12 13
1 8

我的解答思路和尝试过的方法

实际输出
1 9 6 0 8 4 3 5 12 13

我想要达到的结果

1 12 9 6 0 8 4 3 5 13

  • 写回答

1条回答 默认 最新

  • it_hao528 2022-07-02 00:22
    关注

    修改reverse函数中的 m=(b-a)/2; 为 m=(b+a)/2; 这么计算出来的中间位置才是正确的。
    还有reverse函数中的for循环内部应该是沾错了吧,修改后的代码如下:

    void reverse(int *p, int a, int b)
    {
        int m,i,j,t;
        m=(b+a)/2;
        j = b;
        for(i=a;i<=m;i++)
        {
            t=p[i];
            p[i]=p[j];
            p[j]=t;
            j--;
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 7月10日
  • 已采纳回答 7月2日
  • 创建了问题 7月2日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看