怎么将列表分成n对<新人求助>
【问题描述】给定长度为2n的自然数列表nums,把这些数分成n对,把每一对的最小值加起来(不同的分法,其和可能不同),输出最小值和的最大值。
【输入形式】
输入偶数长度的列表,包括方括号,逗号分隔
【输出形式】
和的最大值,整数
【样例输入】
【样例输出】
4
【样例说明】
把列表按照某种分法,分成n对,把每一对的最小值加起来。不同的分法,其和是不同的。
例如可以分为: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
d1=min(list_part1)
nums_copy=nums[:]
del nums_copy
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 maxsum(x):
x.sort()
print('最大和分组是:[%d,%d]' % (x[-1],x[-2]))
print('最大和结果是:%d' % (x[-1]+x[-2]))
print('最小和分组是:[%d,%d]' % (x,x))
print('最小和结果是:%d' % (x+x))
maxsum(eval(input('请输入整数列表:'))) 本帖最后由 yuxijian2020 于 2021-4-17 13:16 编辑
def MaxMinimumSum(nums: list) -> int:
result = 0
nums.sort()
for i in range(0, len(nums), 2):
result += nums
return result
if __name__ == '__main__':
nums =
print(MaxMinimumSum(nums))
抽象看问题,题目虽然是拆分列表,但是要求输出是 最小值和的最大值,这才是目标
所以不是一定要先拆分再求结果
2n大小的数组分成n对-->就是每对2个数
最小值和的最大值 -->必然是小的数和小的数分一对,就直接对数组排序,然后每2个数分一对求和 def fenge(nums):
return list(zip(**2))
def maxsum(fenge_nums):
return sum(map(lambda x:x,fenge_nums))
nums=
fenge_nums=fenge(nums)
print(fenge_nums)
print(maxsum(fenge_nums))
先拆分再求结果可以这样 笨鸟学飞 发表于 2021-4-17 13:08
长度为2n 要不是4个数呢 换个思路理解这个题目
我感觉无论你怎么分。既然是自然数列表,只要按照升序排列,索引位置前两位的和必然是最小值,索引位置最后两位相加一定是最大值。
直接index(0)+index(1)的值就应该是min
index(len(2n))+index(len(2n-1))的值就应该是max
不信你可以试试例举几个
如:等等
最后也不知道这种题目的设置是啥意义! wp231957 发表于 2021-4-17 13:34
长度为2n 要不是4个数呢
2n必然是偶数了 yuxijian2020 发表于 2021-4-17 13:14
抽象看问题,题目虽然是拆分列表,但是要求输出是 最小值和的最大值,这才是目标
所以不是一定要先拆 ...
所以完全不能理解这个出题意义在哪里哎! lovecnbear 发表于 2021-4-17 18:46
换个思路理解这个题目
我感觉无论你怎么分。既然是自然数列表,只要按照升序排列,索引位置前两位的和必然 ...
max是1+3+5 只和奇数位有关 不是前两位最后两位
wp231957 发表于 2021-4-17 13:34
长度为2n 要不是4个数呢
冒泡排序之后。0和1是最小,最后和倒数第2是最大,有异议?
页:
[1]