Я написал код в Python, чтобы найти максимум и минимум 4 элементов из массива из 5 элементов - PullRequest
0 голосов
/ 12 октября 2019

Я делал код для составления суммы списка Макс и Мин. 4 элемента из списка из 5 элементов. Мой код работал нормально, пока он не был введен для больших номеров.

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)

Я получаю правильные ответы, если я использую маленький номер. В массиве. Однако он не может отображать минимальную сумму при введении в большой номер.

Ответы [ 2 ]

2 голосов
/ 12 октября 2019

Проблема в вашем текущем коде связана не с большими числами, а с индексом 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)
1 голос
/ 12 октября 2019

Обычно я использовал бы

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 числа.

...