|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
【问题描述】
给定长度为2n的自然数列表nums,把这些数分成n对,把每一对的最小值加起来(不同的分法,其和可能不同),输出最小值和的最大值。
【输入形式】
输入偶数长度的列表,包括方括号,逗号分隔
【输出形式】
和的最大值,整数
【样例输入】
[1,4,3,2]
【样例输出】
4
【样例说明】
把列表按照某种分法,分成n对,把每一对的最小值加起来。不同的分法,其和是不同的。
例如[1,4,3,2]可以分为:4,1和3,2 或者 4,2和3,1;或者4,3和2,1;显然4,3和2,1这种分法最小值的和最大,3+1=4,前面两种最小值都是3。所以输出结果4.
def maxsum(nums):
n=int(len(nums)/2)
list_d3=[]
for i in range(n+1):
list_part1=nums[i:i+n]
d1=min(list_part1)
nums_copy=nums[:]
del nums_copy[i:i+n]
list_part2=nums_copy
d2=min(list_part2)
d3=d1+d2
list_d3.append(d3)
list_d3=list_d3[:]
d4=max(list_d3)
return d4
nums = eval(input())
v = maxsum(nums)
print(v)
我只能将列表分成两对,新人求助
- def fenge(nums):
- return list(zip(*[iter(sorted(nums))]*2))
- def maxsum(fenge_nums):
- return sum(map(lambda x:x[0],fenge_nums))
- nums=[1,7,3,4,5,11]
- fenge_nums=fenge(nums)
- print(fenge_nums)
- print(maxsum(fenge_nums))
复制代码
先拆分再求结果可以这样
|
|