【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];  }