1. 程式人生 > 其它 >陣列元素迴圈右移問題 (20 分)

陣列元素迴圈右移問題 (20 分)

技術標籤:PTA

一、題目簡介

題目

輸入格式:
每個輸入包含一個測試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個整數,之間用空格分隔。

輸出格式:
在一行中輸出迴圈右移M位以後的整數序列,之間用空格分隔,序列結尾不能有多餘空格。

輸入樣例:

6 2
1 2 3 4 5 6

輸出樣例:

5 6 1 2 3 4

二、思路與程式碼

思路:
對陣列元素迴圈右移問題,我們可以看做地址變換的問題,本質上就是換了一個開始位置往後數數,因此我們只需要找出第一個元素的位置就行。在原先的陣列中,如果i=0對應第一個數字,那麼向右迴圈右移m位後,第(n-m)%n位這時候就變成了第一位。
關鍵點:m>n的時候,我們藉助鐘錶來理解,往後13小時和往後1小時最終的時針位置是一樣的,所以題目中m>n的問題只需要做m%n就可以解決。

程式碼:

#include <stdio.h>

int main(){
    int num[100];
    int n, m;
    scanf("%d%d", &n, &m);
    m = m % n; // 如果m>n,需要用m%n.
    for(int index = 0; index < n; index++){
        scanf("%d", &num[index]);
    }
    int tempN = n, index = (n-m)%n;
    printf("%d"
, num[index++]); if(index == n){ index = 0; } for(; tempN > 1; tempN--){ printf(" %d", num[index++]); if(index == n){ index = 0; } } return 0; }