C语言:头歌数组循环右移

任务描述

本关任务:本题要求实现一个对数组进行循环右移的简单函数:一个数组 a 中存有 n(> 0)个整数,将每个整数循环向右移 m(≥ 0)个位置,即将 a 中的数据由(a0 a1 ⋯ a(n−1))变换为(a(n−m) ⋯ a(n−1) a0 a1 ⋯a(n−m−1))(最后 m 个数循环移至最前面的 m 个位置)。

函数接口定义: int ArrayShift( int a[], int n, int m ); 其中 a[] 是用户传入的数组;n 是数组的大小;m 是右移的位数。函数 ArrayShift 须将循环右移后的数组仍然存在a [] 中。

主程序样例:

 
  1. #include <stdio.h>
  2. #define MAXN 10
  3. void ArrayShift( int a[], int n, int m );
  4. int main()
  5. {
  6. int a[MAXN], n, m;
  7. int i;
  8. scanf("%d %d", &n, &m);
  9. for ( i = 0; i < n; i++ ) scanf("%d", &a[i]);
  10. ArrayShift(a, n, m);
  11. for ( i = 0; i < n; i++ ) {
  12. if (i != 0) printf(" ");
  13. printf("%d", a[i]);
  14. }
  15. printf("\n");
  16. return 0;
  17. }
  18. /* 你的代码将被嵌在这里 */

编程要求

根据提示,在右侧编辑器补充代码,实现一个对数组进行循环右移的简单函数。

测试说明

输入样例:

 
  1. 6 2
  2. 1 2 3 4 5 6

输出样例: 5 6 1 2 3 4

#include <stdio.h>
#define MAXN 10

int ArrayShift( int a[], int n, int m );

int main()
{
    int a[MAXN], n, m;
    int i;

    scanf("%d %d", &n, &m);
    for ( i = 1; i <= n; i++ ) scanf("%d", &a[i]);

    ArrayShift(a, n, m);

    for ( i = 1; i <= n; i++ ) {
        if (i != 1) printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");

    return 0;
}

int ArrayShift( int a[], int n, int m )//整体逻辑:把m前元素与m后元素调换位置
{
    //=======begin=======
    int g[m+1],f=1,b[n-m+1];

    for (int i=1;i<=n-m;i++)
    {
        b[f] = a[i];
        f++;
    }
    f=1;
    for (int i=n-m+1;i<=n;i++)
    {
        g[f] = a[i];
        f++;
    }
    for(int i=1;i<=m;i++)
    {
        a[i] = g[i];
    }
    f=1;
    for(int i=m+1;i<=n;i++)
    {
        a[i] = b[f];
        f++;
    }

   //========end========
}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

czy,出发!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值