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

猜你喜欢

转载自blog.csdn.net/weixin_43731183/article/details/85951532