pat 乙级 1008 数组元素循环右移问题(C++)
題目
一個(gè)數(shù)組A中存有N(>0)個(gè)整數(shù),在不允許使用另外數(shù)組的前提下,將每個(gè)整數(shù)循環(huán)向右移M(≥0)個(gè)位置,即將A中的數(shù)據(jù)由(A?0 A?1 ?A?N?1)變換為(A?N?M?? ??AN???1A?0A1?A?N?M?1)(最后M個(gè)數(shù)循環(huán)移至最前面的M個(gè)位置)。如果需要考慮程序移動(dòng)數(shù)據(jù)的次數(shù)盡量少,要如何設(shè)計(jì)移動(dòng)的方法?
輸入格式:
每個(gè)輸入包含一個(gè)測(cè)試用例,第1行輸入N(1≤N≤100)和M(≥0);第2行輸入N個(gè)整數(shù),之間用空格分隔。
輸出格式:
在一行中輸出循環(huán)右移M位以后的整數(shù)序列,之間用空格分隔,序列結(jié)尾不能有多余空格。
輸入樣例:
6 2
1 2 3 4 5 6
輸出樣例:
5 6 1 2 3 4
分析
- 使用一個(gè)數(shù)組記錄下標(biāo)的變動(dòng),然后把這個(gè)數(shù)組的值傳入原數(shù)組作為下標(biāo)即可
- 注意原數(shù)組一個(gè)元素和循環(huán)移動(dòng)超過(guò)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)//只有一個(gè)元素,直接輸出,并結(jié)束程序{cout<<a[0];return 0;}if(M>=N)//循環(huán)移動(dòng)次數(shù)超過(guò)N次,等效于移動(dòng)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 //最后個(gè)數(shù)后面沒(méi)有空格cout<<a[b[i]];}return 0; }本題應(yīng)該是用鏈表,但是我好菜,還沒(méi)復(fù)習(xí)到那點(diǎn),先這樣做吧,過(guò)幾天補(bǔ)上用鏈表的。如果考試遇到,能做還是用正統(tǒng)方法做,不能的話,這樣也可以吧,AC就好(\doge) 。
如果本文對(duì)你有幫助,請(qǐng)給我點(diǎn)贊吧~!
有任何問(wèn)題或建議,記得評(píng)論區(qū)給我留言,感謝感謝。
更多題解
pat 乙級(jí) 題解匯總(持續(xù)更新)(C++)
總結(jié)
以上是生活随笔為你收集整理的pat 乙级 1008 数组元素循环右移问题(C++)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 安卓省电软件-电池管家(安卓省电软件)
- 下一篇: pat 乙级 1013 数素数(C++)