小勇CPU 2022-09-29 22:28 采纳率: 100%
浏览 28
已结题

数组移动左移固定位数

想用新建一个数组做中间变量,后按顺序输出数组,但运行结果不完全正确

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int n,p,i;
    //p为移动数目,n为数列个数;
    scanf("%d", &p);
    scanf("%d", &n);
    unsigned int a[n];

    for(i = 0;i < n;i++)
    {
        scanf("%d", &a[i]);
    }
    int q = p%n;
    unsigned int c[q];
    for(i = 0;i < p;i++)
    {
        c[i] = a[i];
        a[i] = a[p+i];
    }
    for(i = 0;i < n-q;i++)
    {
        printf("%d ",a[i]);
    }
    for(i = 0;i < q;i++)
    {
        printf("%d ",c[i]);
    }
    return 0;
}



  • 写回答

1条回答 默认 最新

  • 浪客 2022-09-29 23:32
    关注
    
    int main()
    {
        int n, p, i;
        // p为移动数目,n为数列个数;
        scanf("%d", &p);
        scanf("%d", &n);
        unsigned int a[n];
    
        for (i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        int q = p % n;
        unsigned int c[q];
        for (i = 0; i < p; i++)
        {
            c[i] = a[i];
            // a[i] = a[p + i]; 这个操作后面执行
        }
        // 前移a[p]后面的元素
        for (i = 0; i < n - p; i++)
        {
            a[i] = a[i + p];
        }
        //把p前的放到a末尾
        for (i = 0; i < p; i++)
        {
            a[i + n - p] = c[i];
        }
        //
        for (i = 0; i < n; i++)
        {
            printf("%d ", a[i]);
        }
        // printf("\n");
        // for (i = 0; i < q; i++)
        // {
        //     printf("%d ", c[i]);
        // }
        return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月8日
  • 已采纳回答 9月30日
  • 创建了问题 9月29日