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()方法只在两个元素之间添加字符,刚好满足要求