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 шт):
Вот такое даёт 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)