1. 程式人生 > >6-1 陣列迴圈右移

6-1 陣列迴圈右移

本題要求實現一個對陣列進行迴圈右移的簡單函式:一個數組a中存有n(>0)個整數,將每個整數迴圈向右移m(≥0)個位置,即將a中的資料由(a​0a1⋯a​n−1)變換為(a​n−m⋯an−1a0a1⋯a​n−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;
    }
}