6-2 數組循環右移 (20 分)
本題要求實現一個對數組進行循環右移的簡單函數:一個數組a中存有n(>)個整數,將每個整數循環向右移m(≥)個位置,即將a中的數據由(a0a1⋯an−1)變換為(an−m⋯an−1a0a1⋯an−m−1)(最后m個數循環移至最前面的m個位置)。
函數接口定義:
int ArrayShift( int a[], int n, int m );
其中a[]
是用戶傳入的數組;n
是數組的大小;m
是右移的位數。函數ArrayShift
須將循環右移后的數組仍然存在a[]
中。
裁判測試程序樣例:
#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 = 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;
}
/* 你的代碼將被嵌在這里 */
輸入樣例:
6 2
1 2 3 4 5 6
輸出樣例:
5 6 1 2 3 4
1 int ArrayShift( int a[], int n, int m ){ 2 int t=0; 3 for(int j=0;j<m;j++){ 4 t=a[n-1]; 5 for(int i=n-1;i>0;i--){ 6 7 a[i]=a[i-1]; 8 } 9 a[0]=t; 10 } 11 return 1; 12 }