打印使用随机输入的 5 个整数中的 4 个的最大和最小总和
to print maximum and minimum sum of 4 out of 5 integers inputted using random
在 hackerrank 中,这个问题在 15 个测试用例中失败了 8 个,有人可以纠正这个问题并告诉我哪里出了问题。
另外我想在这个问题中使用随机而不是通过其他方法。
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)
你的算法有问题。鉴于您对 5 个整数的隐含测试,您将随机抽取 5 个样本。不能保证您会为其中两个样本选择要排除的最小和最大元素中的每一个。
您的代码找到您选择的样本的最小值和最大值,但这不是问题规范。您还没有解释您认为这会如何为您提供可靠的答案,因此我们无法“修复”您的代码。
这是一个具有直接、确定性解决方案的问题。您涉及随机组件的个人要求似乎不符合解决给定问题的目标。我建议您停止尝试使用 random
,并简单地解决给定的问题。
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)
在 hackerrank 中,这个问题在 15 个测试用例中失败了 8 个,有人可以纠正这个问题并告诉我哪里出了问题。
另外我想在这个问题中使用随机而不是通过其他方法。
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)
你的算法有问题。鉴于您对 5 个整数的隐含测试,您将随机抽取 5 个样本。不能保证您会为其中两个样本选择要排除的最小和最大元素中的每一个。
您的代码找到您选择的样本的最小值和最大值,但这不是问题规范。您还没有解释您认为这会如何为您提供可靠的答案,因此我们无法“修复”您的代码。
这是一个具有直接、确定性解决方案的问题。您涉及随机组件的个人要求似乎不符合解决给定问题的目标。我建议您停止尝试使用 random
,并简单地解决给定的问题。
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)