柳叶lhy 2019-11-27 21:35 采纳率: 50%
浏览 298
已采纳

c++整数平移问题,部分代码有些疑惑

1.p1--注释的那部分有些疑惑,位置换了,然后就无法运行出结果,不明白为什么
2.代码如下:
#include
using namespace std;
int main()
{
void move(int[], int,int);
int a[5] = { 1,2,3,4,5 };
int m;
cout << "请输入你要移动几位数:";
cin >> m;
move(a, 5,m);
return 0;
}
void move(int a[], int n,int m)
{

int* p1,*p2;
int i=1,t;
while(i<=m)
{
    p1 = a + n - 1;
    t = *p1;
    p2 = a;
    while (p1 > a)
    {
        *p1 = *(p1 - 1);
        p1--;
    }
    *p2 = t;
    //p1--;放在这里的时候,程序无法运行出结果;
    i++;
}
for (i = 0; i < n; i++)
    cout << a[i] << " ";

}

  • 写回答

2条回答 默认 最新

  • threenewbee 2019-11-28 00:11
    关注

    写程序的目的不是为了故弄玄虚,而是要写出简单,让人可以理解的代码
    你的程序看着眼花缭乱,如同玩杂耍。
    你的程序让我这样职业码农都不能很容易看懂,你觉得正常么?
    看下面的示范
    记住一个原则,一个函数只能做一件事情。

    #include <iostream>
    
    using namespace std;
    
    void move(int[], int,int);
    void move(int[], int);
    int main()
    {
        int a[5] = { 1,2,3,4,5 };
        int m;
        cout << "请输入你要移动几位数:";
        cin >> m;
        move(a, 5, m);
        for (int i = 0; i < 5; i++) //输出的代码放在主程序
            cout << a[i] << " ";
        return 0;
    }
    void move(int a[], int n) //这个函数只负责移动一次
    {
        int x = a[n - 1]; //把最后一个数字暂存起来
        for (int i = n - 1; i > 0; i--) //从后往前每个数字等于前面一个数字,等于往后移动,特别注意,我的程序里的i相当于你的p1指针,所以你明白为什么你i--不能放在循环外面了吧,因为每次都要-1
            a[i] = a[i - 1];
        a[0] = x; //最后一个数字放在第一个
    }
    void move(int a[], int n, int m) //这个函数只负责调用n次移动一次的那个move
    {
        for (int i = 0; i < m % n; i++) //因为移动每n次,又转回来,相当于没有移动,所以只需要移动m % n次。
            move(a, n);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)