1. 程式人生 > >1008 陣列元素迴圈右移問題 python

1008 陣列元素迴圈右移問題 python

1008 陣列元素迴圈右移問題 (20 分)

一個數組A中存有N(>0)個整數,在不允許使用另外陣列的前提下,將每個整數迴圈向右移M(≥0)個位置,即將A中的資料由(A​0​​A​1​​⋯A​N−1​​)變換為(A​N−M​​⋯A​N−1​​A​0​​A​1​​⋯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

我寫的程式碼:

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()方法只在兩個元素之間新增字元,剛好滿足要求