1008 陣列元素迴圈右移問題 python
阿新 • • 發佈:2019-01-08
1008 陣列元素迴圈右移問題 (20 分)
一個數組A中存有N(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(≥0)個位置,即將A中的資料由(A0A1⋯AN−1)變換為(AN−M⋯AN−1A0A1⋯AN−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
我寫的程式碼:
a=input() ls=a.split(' ') b=input() num_ls=b.split(' ') dic={} lso=[1]*100 ls2=[] s=len(num_ls) for i in range(s): num_ls[i]=eval(num_ls[i]) #把num_ls的元素變成數字 M=eval(ls[-1]) #向右移動M位 for i in range(s): if (i+M)<=(s-1): dic[i+M]=num_ls[i] else: dic[i-s+2]=num_ls[i] for i in list(dic.keys()): lso[i]=dic.get(i) ls2=lso[:eval(ls[0])] for i in range(s-1): print(ls2[i],end=' ') print(ls2[-1])
寫了很久,超級麻煩,而且還錯了好幾個測試點,然後搜了下別人的程式碼
發現一個好厲害的 PAT-python-zjw的程式碼
n=input().split()
m=input().split()
a=int(n[0])
b=int(n[1])
m1=m[a-b:]
m2=m[:a-b]
x=m1+m2
print(' '.join(x))
簡潔清晰 好厲害
另外str.join()方法比較適合在PAT上做輸出
經常要求最後一項輸出後面沒有空格,join()方法只在兩個元素之間新增字元,剛好滿足要求