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

2024-10-02 00:34:09 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

import random

在列表中输入值

arr=[int(x) for x in input().split()]

为最小值(最小值)分配随机选择的大数值

mini=1000000000000

maxi=0

for x in range(len(arr)-1):
    randomsum=sum(random.sample(arr,4))
    if randomsum<mini:
       mini=randomsum
    if randomsum >maxi:
       maxi=randomsum

print(mini,maxi)

Tags: 方法inimport列表forinputif测试用例
2条回答

Given five positive integers, find the minimum and maximum values that can be calculated by summing exactly four of the five integers. Then print the respective minimum and maximum values as a single line of two space-separated long integers.

问题清楚地表明,打印的值应该是列表中最小的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)

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

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

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

相关问题 更多 >

    热门问题