为了账号安全,请及时绑定邮箱和手机立即绑定

我在 Python 中编写了一个代码来从 5 个元素的数组中找到 4 个元素的最大值和最小值

我在 Python 中编写了一个代码来从 5 个元素的数组中找到 4 个元素的最大值和最小值

海绵宝宝撒 2022-06-22 17:37:15
我正在编写一个代码来计算最大值和最小值列表的总和。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)如果我使用 Small no,我会得到正确的答案。在数组中。但是,当引入大号示例时,它不能显示最小总和:396285104 573261094 759641832 819230764 364801279 最大值工作正常但最小值即将到来 2153578241 而不是 2093989309
查看完整描述

2 回答

?
白衣染霜花

TA贡献1796条经验 获得超10个赞

您当前代码的问题不是大数字,而是索引 3。您永远不会从计算中排除该索引,因此如果它是列表中最大的或最小的,您将得到错误的结果。


你从不跳过索引 3 的原因是你的外循环运行是 on 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函数会更容易,但您已经在执行此操作),然后找到单个最大值和最小值(可能使用minandmax函数) . 然后,您可以通过从所有项目的总和中减去最大的单个项目来找到四个项目的最小总和,而通过减去最小的单个项目来找到四个项目的最大总和。


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)


查看完整回答
反对 回复 2022-06-22
?
LEATH

TA贡献1936条经验 获得超6个赞

通常我会使用


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 个数字求和。


查看完整回答
反对 回复 2022-06-22
  • 2 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信