1. 程式人生 > 其它 >PTA6-26-一維陣列 陣列迴圈右移 (20 分)

PTA6-26-一維陣列 陣列迴圈右移 (20 分)

技術標籤:PTA(C語言)程式設計c語言

題目

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

題目來源:

浙大版《C語言程式設計(第3版)》題目集