c语言调用函数数组循环右移

题目描述:
编写一个函数ArrayShift( int arr[], int n, int m),该函数将数组arr中每个元
素循环向右移m个位置。
如图所示

img

img


#include <stdio.h>
#define MAXN 10
int ArrayShift(int arr[], int n, int m);
int main()
{
    int a[MAXN], n, m;
    int i;
 
    scanf("%d %d", &n, &m);
    for (i = 0; i < n; i++) scanf("%d", &a[i]);
 
    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 arr[], int n, int m) {
    int i, j;
    m = m % n;                            
    int temp[100];                            
    for (j = 0; j < n; j++) {                
        temp[j] = arr[j];
    }
    for (i = 0; i < n; i++) {
        if (i >= (n - m)) {                    
        arr[i + m - n] = temp[i];
        }
        else {                                
            arr[i + m] = temp[i];
        }
    }
}

右移的思路:
首先移动次数对数组大小进行求余,只需要移动余数次即可。比如数组大小10,移动11,那么实际移动1个位置即可
其次,将右侧需要移动数量的元素复制到新数组,然后将左侧剩余元素全部右移指定数量的位置
最后,将复制的右侧数组逐个复制到数组左侧即可

#include <stdio.h>
void ArrayShift( int arr[], int n, int m)
{
    int i=0,temp[100];
    m = m%n;
    for(i=0;i<m;i++)
        temp[i] = arr[n-m+i];
    for(i=n-1;i>=m;i--)
        arr[i] = arr[i-m];
    for(i=0;i<m;i++)
        arr[i] = temp[i];
}
int main()
{
    int m,n,i,arr[100];
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
        scanf("%d",&arr[i]);
    ArrayShift(arr,n,m);
    for(i=0;i<n;i++)
        printf("%d ",arr[i]);
    return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632