akcw 发表于 2021-4-17 12:48:32

怎么将列表分成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)
我只能将列表分成两对,新人求助

笨鸟学飞 发表于 2021-4-17 13:08:04

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:14:25

本帖最后由 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个数分一对求和

kogawananari 发表于 2021-4-17 13:16:15

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))
先拆分再求结果可以这样

wp231957 发表于 2021-4-17 13:34:10

笨鸟学飞 发表于 2021-4-17 13:08


长度为2n   要不是4个数呢

lovecnbear 发表于 2021-4-17 18:46:20

换个思路理解这个题目
我感觉无论你怎么分。既然是自然数列表,只要按照升序排列,索引位置前两位的和必然是最小值,索引位置最后两位相加一定是最大值。

直接index(0)+index(1)的值就应该是min
index(len(2n))+index(len(2n-1))的值就应该是max
不信你可以试试例举几个
如:等等
最后也不知道这种题目的设置是啥意义!

lovecnbear 发表于 2021-4-17 18:50:21

wp231957 发表于 2021-4-17 13:34
长度为2n   要不是4个数呢

2n必然是偶数了

lovecnbear 发表于 2021-4-17 18:53:24

yuxijian2020 发表于 2021-4-17 13:14
抽象看问题,题目虽然是拆分列表,但是要求输出是 最小值和的最大值,这才是目标
所以不是一定要先拆 ...

所以完全不能理解这个出题意义在哪里哎!

kogawananari 发表于 2021-4-18 17:45:44

lovecnbear 发表于 2021-4-17 18:46
换个思路理解这个题目
我感觉无论你怎么分。既然是自然数列表,只要按照升序排列,索引位置前两位的和必然 ...

max是1+3+5 只和奇数位有关 不是前两位最后两位

笨鸟学飞 发表于 2021-4-19 23:27:42

wp231957 发表于 2021-4-17 13:34
长度为2n   要不是4个数呢

冒泡排序之后。0和1是最小,最后和倒数第2是最大,有异议?
页: [1]
查看完整版本: 怎么将列表分成n对<新人求助>