陣列元素迴圈右移問題 (20 分)
阿新 • • 發佈:2021-02-04
技術標籤: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;
}