Обращение к несуществующим значениям массива
Вводится n-ное количество положительных чисел. Среди них нужно выбрать два наибольших числа, сумма которых делится на m. Массив r должен хранить максимальные числа, имеющие соответствующий остаток от деления на m. Сам вопрос: после строки r = [0] * n нет никаких прямых назначений массиву, есть только обращения. получается что к какому бы индексу массива мы ни обратились бы, элемент под этим индексом будет равен нулю. Тогда как вообще работает условие r[m-p]>a? И почему именно под таким индексом идет обращение к массиву? Массив нулями заполнен, а мы к нему обращаемся.
m = 120
r = [0]*m
n = int(input())
left = 0
right = 0
for i in range(n):
a = int(input())
p = a % m
if p == 0:
if (r[0] > a) and (r[0]+a > left + right):
left = r[0]
right = a
else:
if (r[m-p] > a) and (r[m-p]+a>left+right):
left = r[m-p]
right = a
if a > r[p]:
r[p] = a
print(left, right)
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Вот здесь в p-й элемент массива записывается максимальное число с остатком p по модулю m:
if a > r[p]:
r[p] = a