设计一个函数,该函数用于实现一维数组的循环右移。
函数原型为:void arrayShiftRight(int a[ ],int n,int m);
该函数的功能是将长度为n的数组a循环右移m个位置。
请使用下面的源代码来测试你设计的函数:
int main(){
int i,n,m;
scanf("%d%d",&n,&m);
int arr[n];
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
arrayShiftRight(arr,n,m);
for(i=0;i<n;i++)
printf("%d ",arr[i]);
return 0;
}
输入描述第一行输入整数n和m(m可能大于n)
第二行输入n个整数
输出描述输出循环右移后的数组
提示无
样例输入
8 3
1 2 3 4 5 6 7 8
样例输出
6 7 8 1 2 3 4 5
允许最长运行时间3000ms
允许使用最大内存512MB
题目里测试源代码对数组arr[]定义有错误,下面代码里做了修改,供参考:
#include<stdio.h>
void arrayShiftRight(int a[],int n,int m);
int main(void)
{
int arr[80],i,m,n;
scanf("%d%d",&n,&m);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
arrayShiftRight(arr,n,m);
for(i=0;i<n;i++)
printf("%d ",arr[i]);
return 0;
}
void arrayShiftRight(int a[],int n,int m)
{
int i,j,k;
for(i=0;i<m;i++)
{
k=a[n-1];
for(j=n-1;j>0;j--)
a[j]=a[j-1];
a[0]=k;
}
}