我在 Python 中写了一个代码,用于从 5 个元素的数组中找到 4 个元素的最大值和最小值
I wrote A Code In Python To find Max And Minimum Of 4 elements out of array of 5 elements
我正在编写一个代码来计算最大和最小列表的总和。 5 个元素列表中的 4 个元素。我的代码在引入大号之前一直运行良好。
def miniMaxSum(arr):
sum1=0
small=arr[0]+arr[1]+arr[2]+arr[3]+arr[4]
lar=0
for i in range(0,4):
sum1=0
for j in range(0,4):
if i+j<=4:
sum1+=arr[i+j]
else:
sum1+=arr[(i+j)-5]
if sum1>=lar:
lar=sum1
if sum1<=small:
small=sum1
print("Minimum:",small,"Maximum:",lar)
if __name__ == '__main__':
arr = list(map(int, input().rstrip().split()))
miniMaxSum(arr)
如果我使用小号,我会得到正确的答案。在 Array 中。但是当引入大号时它不能显示 Minimum Sum。
例子:
396285104 573261094 759641832 819230764 364801279
最大值工作正常但最小值即将到来 2153578241 而不是 2093989309
通常我会使用
print("Minimum:", sum(sorted(arr)[:4]), "Maximum:", sum(sorted(arr)[1:]))
我试着理解你的代码,但我只能把它改成这样:
def miniMaxSum(arr):
small = arr[0] + arr[1] + arr[2] + arr[3] + arr[4]
large = 0
for i in range(5):
temp = 0
for j in range(5):
if i != j:
temp += arr[j]
if temp > large:
large = temp
if temp < small:
small = temp
print("Minimum:", small, "Maximum:", large)
#arr = list(map(int, input().rstrip().split()))
miniMaxSum(arr)
使用 i != j
我总是跳过一个数字,所以它总是只对 4 个数字求和。
您当前代码的问题不在于大数字,而在于索引 3。您永远不会从计算中排除该索引,因此如果它是列表中最大的最小值,您就会出错结果。
您从不跳过索引 3 的原因是您的外循环在 range(0, 4)
上运行,而内循环也是如此。这意味着您需要四个项目,从索引 0 到 3 开始。但是您永远不会从索引 4 开始,这是跳过索引 3 的情况。
所以您可以通过简单的修复来修复您的代码:
for i in range(0, 5): # replace 4 with 5 here!
sum1=0
for j in range(0,4):
...
我注意到有很多更有效的方法可以解决这个问题。例如,您可以计算列表中所有五个值的总和(您已经在 small
中这样做了,尽管使用内置 sum
函数会更容易),然后找到最大的一个和最小值(可能使用 min
和 max
函数)。然后,您可以通过从所有项目的总和中减去最大的单个项目来找到最小的四项总和,并通过减去最小的单个项目来找到最大的四项总和。
def miniMaxSum(arr):
arr_sum = sum(arr)
min_val = min(arr)
max_val = max(arr)
print("Minimum:", arr_sum - max_val, "Maximum:", arr_sum - min_val)
我正在编写一个代码来计算最大和最小列表的总和。 5 个元素列表中的 4 个元素。我的代码在引入大号之前一直运行良好。
def miniMaxSum(arr):
sum1=0
small=arr[0]+arr[1]+arr[2]+arr[3]+arr[4]
lar=0
for i in range(0,4):
sum1=0
for j in range(0,4):
if i+j<=4:
sum1+=arr[i+j]
else:
sum1+=arr[(i+j)-5]
if sum1>=lar:
lar=sum1
if sum1<=small:
small=sum1
print("Minimum:",small,"Maximum:",lar)
if __name__ == '__main__':
arr = list(map(int, input().rstrip().split()))
miniMaxSum(arr)
如果我使用小号,我会得到正确的答案。在 Array 中。但是当引入大号时它不能显示 Minimum Sum。 例子: 396285104 573261094 759641832 819230764 364801279 最大值工作正常但最小值即将到来 2153578241 而不是 2093989309
通常我会使用
print("Minimum:", sum(sorted(arr)[:4]), "Maximum:", sum(sorted(arr)[1:]))
我试着理解你的代码,但我只能把它改成这样:
def miniMaxSum(arr):
small = arr[0] + arr[1] + arr[2] + arr[3] + arr[4]
large = 0
for i in range(5):
temp = 0
for j in range(5):
if i != j:
temp += arr[j]
if temp > large:
large = temp
if temp < small:
small = temp
print("Minimum:", small, "Maximum:", large)
#arr = list(map(int, input().rstrip().split()))
miniMaxSum(arr)
使用 i != j
我总是跳过一个数字,所以它总是只对 4 个数字求和。
您当前代码的问题不在于大数字,而在于索引 3。您永远不会从计算中排除该索引,因此如果它是列表中最大的最小值,您就会出错结果。
您从不跳过索引 3 的原因是您的外循环在 range(0, 4)
上运行,而内循环也是如此。这意味着您需要四个项目,从索引 0 到 3 开始。但是您永远不会从索引 4 开始,这是跳过索引 3 的情况。
所以您可以通过简单的修复来修复您的代码:
for i in range(0, 5): # replace 4 with 5 here!
sum1=0
for j in range(0,4):
...
我注意到有很多更有效的方法可以解决这个问题。例如,您可以计算列表中所有五个值的总和(您已经在 small
中这样做了,尽管使用内置 sum
函数会更容易),然后找到最大的一个和最小值(可能使用 min
和 max
函数)。然后,您可以通过从所有项目的总和中减去最大的单个项目来找到最小的四项总和,并通过减去最小的单个项目来找到最大的四项总和。
def miniMaxSum(arr):
arr_sum = sum(arr)
min_val = min(arr)
max_val = max(arr)
print("Minimum:", arr_sum - max_val, "Maximum:", arr_sum - min_val)