Python Не понимаю, почему программа не заносит в цикл последние значения

Датчик передаёт каждую секунду по каналу связи неотрицательное целое число, не превосходящее 1000 — текущий результат измерений. Временем, в течение которого происходит передача, можно пренебречь. Необходимо найти в заданной серии показаний датчика минимальное чётное произведение двух показаний, между моментами передачи которых прошло не менее 8 секунд. Если получить такое произведение не удаётся, ответ считается равным -1. Общее количество показаний датчика в серии не превышает 10 000.

 N = int(input())
 a=[]
 for i in range(8):
     a.append(int(input()))
 m0 = 1001 #для минимальных четных чисел
 m1 = 1001 #для минимальных нечетных значений
 mp = 1001*1001 #мин произведение
 s = mp
 for i in range(8,N):
     a.append(int(input()))
     if a[0]<m1:
        m1 = a[0]
     if a[0]%2==0 and a[0]<m0:
        m0 = a[0]
     if a[8]%2==0:
        s = a[8]*m1 
        if a[8]*m0<s:
            s = a[8]*m0 
     else:
        if m0<1001:
            s =a[8]*m0
     if s<mp:
        mp =s 
     for j in range(8):
         a[j]=a[j+1]
 if mp==1001*1001:
     mp = -1 
 print(mp) 

Пример входных данных: 10 5 4 3 2 1 6 7 8 9 4 Правильный ответ: 16 (4*4) У меня: 36(9*4) Помогите пожалуйста!!!(


Ответы (1 шт):

Автор решения: MBo

Вот такое даёт 16, но тщательно я не тестировал. i = k % 8 обеспечивает циклическое использование списка на 8 элементов без перезаписи всего.

N = int(input())
a=[]
for i in range(8):
    a.append(int(input()))
odm = 1001
evm = 1001
mulm = 1001 * 1001
for k in range(8, N):
    p = int(input())
    i = k % 8
    if a[i] % 2:
        odm = min(odm, a[i])
    else:
        evm = min(evm, a[i])
    if p % 2:
        mulm = min(p * evm, mulm)
    else:
        mulm = min(p * min(evm, odm), mulm)
    a[i] = p

print(a)
print(mulm)
→ Ссылка