Python 打印使用随机输入的5个整数中的4个的最大值和最小值

Python 打印使用随机输入的5个整数中的4个的最大值和最小值,python,random,sum,max,min,Python,Random,Sum,Max,Min,在hackerrank中,这个问题在15个测试用例中有8个失败,请有人纠正这个问题,并告诉我出了什么问题 另外,我想在这个问题上使用random,而不是其他方法 import random 在列表中输入值 arr=[int(x) for x in input().split()] 为最小值(最小值)分配随机选择的大数值 mini=10000000000 最大值=0 对于范围内的x(len(arr)-1): 随机总和=总和(随机抽样(arr,4)) 如果随机性和最大性: 最大值=随机和 打印(

在hackerrank中,这个问题在15个测试用例中有8个失败,请有人纠正这个问题,并告诉我出了什么问题

另外,我想在这个问题上使用random,而不是其他方法

import random
在列表中输入值

arr=[int(x) for x in input().split()]
为最小值(最小值)分配随机选择的大数值

mini=10000000000
最大值=0
对于范围内的x(len(arr)-1):
随机总和=总和(随机抽样(arr,4))
如果随机性和最大性:
最大值=随机和
打印(迷你、大)

您的算法有问题。给定5个整数的隐含测试,您将随机抽取5个样本。无法保证您会为其中两个样本选择要排除的最小和最大元素

您的代码可以找到所选样本的最小值和最大值,但这不是问题规范。您尚未解释您认为这将如何为您提供可靠的答案,因此我们无法“修复”您的代码

这是一个具有直接、确定性解决方案的问题。你的个人要求涉及一个随机组件似乎不符合解决给定问题的目标。我建议您停止尝试使用
random
,只需按照给定的方法解决问题即可

给定五个正整数,找出可以通过将五个整数中的四个整数求和来计算的最小值和最大值。然后将各自的最小值和最大值打印为一行两个空格分隔的长整数

问题清楚地表明,打印的值应该是列表中最小的4个整数和最大的4个整数。对于较大的数组大小,random.sample仍然无法覆盖数组的所有部分。这个问题需要一个具体的解决方案,而不是随机化样本列表。2线解决方案:

def miniMaxSum(arr):
    arr = sorted(arr)
    print(sum(arr[0:4]), sum(arr[-4:]))
随机获取大小为4的样本的原因是,问题要求您明确获取4个最小值和4个最大值,并在屏幕上打印它们的总和,因此,如果随机获取样本,则不太可能获得4个最小值和4个最大值,即使您没有随机化,而是遍历列表,并将每4个长度子列表与最简单和最大的整数进行比较,您也不会成功,因为列表仍然不太可能已经排序,并且您将按顺序获得4个最小和4个最大的数。这就是为什么这样的事情会失败:

minSeq = max(arr) + 1
maxSeq = 0
for i in range(len(arr) - 4):
    sample = sum(arr[i:i+4])
    if sample < minSeq:
        minSeq = sample
    elif sample > maxSeq:
        maxSeq = sample     
print(minSeq, maxSeq)
minSeq=max(arr)+1
maxSeq=0
对于范围内的i(len(arr)-4):
样本=总和(arr[i:i+4])
如果样本maxSeq:
maxSeq=样本
打印(minSeq、maxSeq)

您是否尝试过简单地使用更多迭代(例如100次)?因为您只迭代len(arr)-1倍于实际最高或最低总和非常低的概率。特别是对于较长的阵列,确定性方法可能是最好的。请解释“我想使用随机”。您打算如何
random
主动参与解决方案?@ClF3是的,成功了,谢谢!!我知道随机函数不是解决这个问题的最好方法,但我想学习如何使用随机函数,所以谢谢
minSeq = max(arr) + 1
maxSeq = 0
for i in range(len(arr) - 4):
    sample = sum(arr[i:i+4])
    if sample < minSeq:
        minSeq = sample
    elif sample > maxSeq:
        maxSeq = sample     
print(minSeq, maxSeq)