360实习---给定一个1到N的排列A1到AN,每次可以将排列的第一个数移动到排列的末尾,假设经过若干次移动后得到排列B1到BN,那么|B1-1|+|B2-2|+...+|BN-N|的最小值是多少
话不多说,直接上图:
经过两次移动过后得到排列{1 5 2 4 3},此时|B1-1|+|B2-2|+|B3-3|+|B4-4|+|B5-5|取得最小值。
此题我才用了暴力**的方法,每次将第一个元素移动到末尾,然后计算值付给一个列表,最后求列表的最小值。
代码如下:
class Qh(object):
def sum1(self, a, b):
sums = 0
for i in range(1, b + 1):
sums += abs(a[i - 1] - i)
return sums
def max1(self, a, b):
l = [0] * b
for i in range(b):
l[i] = self.sum1(a, b)
a.append(a[0])
a.pop(0)
print(min(l))
def main():
qh = Qh()
qh.max1(a, b)
if __name__ == '__main__':
b = input()
b = int(b)
a = input()
a = [int(x) for x in list(a.replace(' ', ''))]
main()
加油!!!