那就这样吧e 2022-11-16 12:44 采纳率: 98.1%
浏览 10
已结题

用数组排序移动的问题

img

img


只要第一题就可以了,该怎么实现做呢,题目就是上面的两张图片,内容也贴出来了

  • 写回答

2条回答 默认 最新

  • 关注

    逐个右移,移动m次就可以了
    (1)思路
    将数组最后一个元素用临时变量t保存,整个数组后移1个位置,然后将 t 中的元素填充到数组的第一个位置,相当于数组整体右移了1位,重复上述操作m次,即可实现所需功能
    (2)adjust及完整代码

    #include <stdio.h>
    #include <stdlib.h>
    
    void adjust(int p[], int n, int m)
    {
        int i, j, t;
        for (i = 0; i < m; i++) //重复m次操作
        {
            t = p[n - 1]; //保存数组最后一个元素
            //数组整体右移
            for (j = n - 1; j > 0; j--)
                p[j] = p[j - 1];
            p[0] = t; //将原来数组的最后1个元素放在数组的开头
        }
    }
    
    int main()
    {
        int a[1000], n,m, i;
        scanf("%d", &n); //输入n
        for (i = 0; i < n; i++)
            scanf("%d", &a[i]); //读取n个数
        scanf("%d", &m); //读取m
        adjust(a, n, m);
        //输出
        for (i = 0; i < n; i++)
            printf("%d ", a[i]);
        return 0;
    }
    
    

    (3)指针操作就是把参数换成指针,数组元素访问用 * (p+i)即可

    #include <stdio.h>
    #include <stdlib.h>
    
    void adjust(int* p, int n, int m)
    {
        int i, j, t;
        for (i = 0; i < m; i++) //重复m次操作
        {
            t = *(p + n - 1); //保存数组最后一个元素
            //数组整体右移
            for (j = n - 1; j > 0; j--)
                *(p + j) = *(p + j - 1);
            *p = t; //将原来数组的最后1个元素放在数组的开头
        }
    }
    
    int main()
    {
        int* a=0;
        int n,m, i;
        scanf("%d", &n); //输入n
        a = (int*)malloc(sizeof(int) * n);
        for (i = 0; i < n; i++)
            scanf("%d", &a[i]); //读取n个数
        scanf("%d", &m); //读取m
        adjust(a, n, m);
        //输出
        for (i = 0; i < n; i++)
            printf("%d ", a[i]);
        free(a); a = 0;
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 11月24日
  • 已采纳回答 11月16日
  • 创建了问题 11月16日

悬赏问题

  • ¥15 python的qt5界面
  • ¥15 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100