设计一个函数,该函数用于实现一维数组的循环右移。
函数原型为: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;
}
输入样例
8 3
1 2 3 4 5 6 7 8
输出样例
6 7 8 1 2 3 4 5
#include<stdio.h>
void main()
{
int arrayShiftRight( int a[], int n, int m );
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]);
}
int arrayShiftRight( int a[], int n, int m )
{
int i,j,k;
m%=n;
/*只有满足m小于n,才能成立!
当m大于n时m/n余数不是n*/
int b[n];
for (i = 0;i < n;i++){
b[i]=a[i];
}
for (i = 0;i < n;i++){
if (i-m < 0)
a[i]=b[n-m+i];
else a[i]=b[i-m];
}
return *a;
}