数组元素循环右移moodle

问题:在moodle上显示调用了受限函数应该怎么修改
原题:若有n个数的数组arr,循环右移一位指每个数移到相邻的右边一个位置,最右边的数移到最左边。如数组1,2,3,4,5;循环右移1位的结果为5,1,2,3,4;右移3位的结果为3,4,5,1,2。

使用指针方法,编写数组右移k位的函数。

编写主函数输入若干元素和右移位数,调用函数右移,在主函数中输出结果。元素个数不超过100。

输入:两行,第1行为若干用空格分隔的整数,以9999表示结束;第2行一个整数,表示右移的位数。

输出:一行,移位的结果,各个数值用一个空格隔开,末尾无空格。

【输入输出样例】
输入:
1 2 3 4 5 9999
3

输出:
3 4 5 1 2


#include <stdio.h>


int main()
{
    int a[20], n=0, m;
    int i;
    
    while ( a[i-1]!=9999 ){ scanf("%d", &a[i]);i++;}  //i = 0; i < n; i++
    n=i-1;
    scanf("%d",&m);
    ArrayShift(a, n, m);

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

    return 0;
}
int ArrayShift( int a[], int n, int m )
{
  int i;
  int k;
  for(k=1;k<=m;k++)
  {
    int temp=a[n-1];
    for(i=n-1;i>0;i--)
     {
        a[i]=a[i-1];
     }
     a[0]=temp;
  }
}

你题目的解答代码如下:

#include <stdio.h>

int ArrayShift(int a[], int n, int m)
{
    int i;
    int k;
    if (m >= n)
        m = m % n;
    for (k = 1; k <= m; k++)
    {
        int temp = a[n - 1];
        for (i = n - 1; i > 0; i--)
        {
            a[i] = a[i - 1];
        }
        a[0] = temp;
    }
}

int main()
{
    int a[101], n = 0, m;
    int i = 0;
    while (1)
    {
        scanf("%d", &a[i]);
        if (a[i] == 9999)
            break;
        i++;
    }
    n = i;
    scanf("%d", &m);
    ArrayShift(a, n, m);
    for (i = 0; i < n; i++)
    {
        if (i != 0)
            printf(" ");
        printf("%d", a[i]);
    }
    printf("\n");

    return 0;
}

如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!

img

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632