pat 乙级 1008 数组元素循环右移问题(C++)
生活随笔
收集整理的這篇文章主要介紹了
pat 乙级 1008 数组元素循环右移问题(C++)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
題目
一個數組A中存有N(>0)個整數,在不允許使用另外數組的前提下,將每個整數循環向右移M(≥0)個位置,即將A中的數據由(A?0 A?1 ?A?N?1)變換為(A?N?M?? ??AN???1A?0A1?A?N?M?1)(最后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
分析
- 使用一個數組記錄下標的變動,然后把這個數組的值傳入原數組作為下標即可
- 注意原數組一個元素和循環移動超過N次的情況
AC代碼
#include<iostream> using namespace std; int main() {int i,N,M;cin>>N>>M;int a[N],b[N];for(i=0;i<N;i++){cin>>a[i];b[i]=i;}if(N==1)//只有一個元素,直接輸出,并結束程序{cout<<a[0];return 0;}if(M>=N)//循環移動次數超過N次,等效于移動M%N次。M=M%N;for(i=0;i<N;i++){if(i-M>=0)b[i]=i-M;elseb[i]=i-M+N;}for(i=0;i<N;i++){if(i!=N-1)cout<<a[b[i]]<<" ";else //最后個數后面沒有空格cout<<a[b[i]];}return 0; }本題應該是用鏈表,但是我好菜,還沒復習到那點,先這樣做吧,過幾天補上用鏈表的。如果考試遇到,能做還是用正統方法做,不能的話,這樣也可以吧,AC就好(\doge) 。
如果本文對你有幫助,請給我點贊吧~!
有任何問題或建議,記得評論區給我留言,感謝感謝。
更多題解
pat 乙級 題解匯總(持續更新)(C++)
總結
以上是生活随笔為你收集整理的pat 乙级 1008 数组元素循环右移问题(C++)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓省电软件-电池管家(安卓省电软件)
- 下一篇: pat 乙级 1013 数素数(C++)