【PAT乙級】數組元素循環右移問題
- 2019 年 11 月 8 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/weixin_42449444/article/details/84865634
題目描述:
一個數組A中存有N(>0)個整數,在不允許使用另外數組的前提下,將每個整數循環向右移M(≥0)個位置,即將A中的數據由(
)變換為(
)(最後M個數循環移至最前面的M個位置)。如果需要考慮程式移動數據的次數盡量少,要如何設計移動的方法?
輸入格式:
每個輸入包含一個測試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個整數,之間用空格分隔。
輸出格式:
在一行中輸出循環右移M位以後的整數序列,之間用空格分隔,序列結尾不能有多餘空格。
輸入樣例:
6 2 1 2 3 4 5 6
輸出樣例:
5 6 1 2 3 4
友情鏈接: 數組循環左移
AC程式碼:
#include <bits/stdc++.h> using namespace std; void Input(int a[], int n); //數組元素的輸入 void RightMove(int a[], int n, int m); //數組元素循環右移 void Print(int a[], int n); //數組元素的輸出 int main() { int n, m; cin >> n >> m; int a[n+m]; //防止出現下標越界 Input(a,n); RightMove(a,n,m); Print(a,n); } void Input(int a[], int n) //數組元素的輸入 { for(int i=0;i<n;i++) { cin >> a[i]; } } void RightMove(int a[], int n, int m) //數組元素循環右移 { m = m%n; for (int i = n+m-1; i > m-1; i--) { a[i] = a[i-m]; } for (int i = 0; i < m; i++) { a[i] = a[n+i]; } } void Print(int a[], int n) //數組元素的輸出 { int i; for(i=0;i<n-1;i++) { cout << a[i] << " "; } cout << a[n-1]; }