问花期. 2022-03-01 17:07 采纳率: 100%
浏览 313
已结题

请编写程序将一个大小为n的整数数组循环左移m位

请编写程序将一个大小为n的整数数组循环左移m位。
大一计算机生数据结构的题目qaq我这个笨蛋是真的不会

  • 写回答

1条回答 默认 最新

  • yun6853992 2022-03-01 17:23
    关注

    按数学思路理解 这里是最最笨的一种方法: 有优化的方案,但这个应该最适合理解,你可以看看~

    
    int main(void)
    {
        const int n = 10;
        int a[n] = { 1,2,3,4,5,6,7,8,9,10 };
        int m = 3;
        //主要是思路 循环左移 是不是就是把前m个提取,把剩下的n-m个移动到最前面,然后剩下的位置再把m个放进去
        //最笨的办法就是申请同样大的内存  按位置放
        int res[n] = { 0 }; //这个存储最后的结果
        //就是把 4 5 6 7 8 9 10 1 2 3 存进来  分两步
        for (int i = m; i < n;  i++) //从第m个开始,往前面放,注意数组下标从零开始的
        {
            res[i - m] = a[i]; //这是把数据往前面的位置放 这里就是 放 4 5 6 7 8 9 10
        }
    
        for (int i = 0; i < m; i++)//把前面剩下的放到最后面去  也就是1 2 3放在上面已经赋值的后面
        {
            res[n - m +i] = a[i];//注意这里从n-m开始
        }
    
        for (int i = 0; i < n; i++)
        {
            printf("%d  ", res[i]);  //输出就是 4 5 6 7 8 9 10 1 2 3
        }
        printf("\n");
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 3月9日
  • 已采纳回答 3月1日
  • 创建了问题 3月1日