标签:print 整数 content 老师 python 注意 sub else 元素
输入包括两行,第一行一个整数n(1 ≤ n ≤ 50),表示学生的人数 第二行为n个整数h[i](1 ≤ h[i] ≤ 1000),表示每个学生的身高
输出一个整数,表示n个学生列队可以获得的最大的疯狂值。 如样例所示: 当队列排列顺序是: 25-10-40-5-25, 身高差绝对值的总和为15+30+35+20=100。 这是最大的疯狂值了。
100
解题思路:先从k1取出最大的放k2中间,然后从k1左边取两个,分别放到k2的两边;再从k1右边取最后两个,分别放在k2的两边。k1随取随删。循环。
输入 1 2 3 4 5 6 7 8 9
1: 9
2: 1 9 2
3: 7 1 9 2 8
4: 3 7 1 9 2 8 4
5: 5 3 7 1 9 2 8 4
有一点需要注意的就是可能会出现这样的一种特例,由于可能会有大量重复的数,再放入最后一个数的时候要注意,计算它放在最左侧或最右侧时与相邻的元素差值的绝对值,选择把它放在绝对值大的那一侧
如 输入: 1 1 1 1 1 1 3 3 3 3 2 2 2 2
最后直接上代码
M= int(input()) k1 = [i for i in map(int, input().split())] # M=15 # k1=[1,1,1,1,1,1,1,2,2,2,2,3,3,3,3] # M=5 # k1=[5, 10, 25, 25, 40] # M=8 # k1=[2,3,5,7,11,13,17,19] result=0 if M>2: k1.sort() k2=[k1[-1]] del(k1[-1]) lrbiao=1 while k1: if len(k1)==1: if lrbiao==1: k2.insert(0,k1[0]) break else: k2.append(k1[0]) break if lrbiao==1: k2.insert(0,k1[0]) del(k1[0]) k2.append(k1[0]) del(k1[0]) lrbiao=0 else: k2.insert(0,k1[-1]) del(k1[-1]) k2.append(k1[-1]) del(k1[-1]) lrbiao=1 #最后两位相同的极端情况 if abs(k2[-1]-k2[-2])<abs(k2[0]-k2[-1]): temp=k2[-1] k2.pop() k2.insert(0,temp) for x in range(M-1): result+=abs((k2[x+1]-k2[x])) elif M==2: result=abs(k1[0]-k1[1]) print(result)
标签:print 整数 content 老师 python 注意 sub else 元素
原文地址:https://www.cnblogs.com/duoba/p/12247575.html