6-1 陣列迴圈右移
阿新 • • 發佈:2019-01-04
本題要求實現一個對陣列進行迴圈右移的簡單函式:一個數組a中存有n(>0)個整數,將每個整數迴圈向右移m(≥0)個位置,即將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
int ArrayShift( int a[], int n, int m )
{
int i,j,t;
for(i=0; i<m; i++)//共移m位
{
t = a[n-1];
for(j=n-1; j>=1; j--) //每次移動全部陣列一位
a[j] = a[j-1];
a[0] = t;
}
}