Ошибка в переборном алгоритме python

Задание. В массив с клавиатуры вводится N (N <= 100) положительных целых чисел, не превышающих 1000. Требуется определить максимальное произведение двух элементов массива, кратное 3 и оканчивающееся на 1. На вход программе в первой строке подается количество чисел N, а затем N положительных целых чисел. Программа должна вывести одно число – максимальное произведение двух чисел, кратное 3 и оканчивающееся на 1

n = int(input())

a = []
max_pr = 0

for i in range(n):
    a.append(int(input()))
    
for i in range(n-1):
    if (a[i] % 3  != 0) and (a[i] % 10 != 1):
        continue
    for j in range(1, n):
        if a[i] == a[j]:
            continue
        if a[j] % 3  == 0 and a[j] % 10 == 1 and (a[i] * a[j]) > max_pr:
            max_pr = a[i] * a[j]
print(max_pr)

Если в массиве числа к примеру 90, 81, 21, 44 то выводит 7290, если 21, 44, 81, 90 то выводит правильный ответ 1701


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

Автор решения: badygin-yakov

"Требуется определить максимальное произведение двух элементов массива, кратное 3 и оканчивающееся на 1." Тут говорится о том что максимальное произведение должно быть кратное 3 и оканчиваться на 1.

n = int(input())

a = []
max_pr = 0

for i in range(n):
    a.append(int(input()))

for i in range(n):
    for j in range(i + 1, n)
        c_pr = a[i] * a[j]
        if (c_pr % 3 == 0) and (c_pr % 10 == 1) and c_pr > max_pr:
            max_pr = c_pr
print(max_pr)
→ Ссылка
Автор решения: Danis

место

for i in range(n - 1)

и

for j in range(1, n)

надо писать

for i in range(n) 

и

for j in range(n)

Место

if (a[i] % 3  != 0) and (a[i] % 10 != 1):
        continue

надо писать

if (a[i] % 3 != 0)

if a[i] == a[j]

надо проверять не значение массива, а индекс

if i == j

место

if a[j] % 3  == 0 and a[j] % 10 == 1 and (a[i] * a[j]) > max_pr

надо

if a[j] % 3 == 0 and a[i] * a[j] % 10 == 1 and a[i] * a[j] > max_pr

Моя версия кода:

arr = [int(input()) for _ in range(int(input()))]

arr.sort()
arr1 = []
for i in range(len(arr)):
    for j in range(i + 1, len(arr)):
        n = arr[i] * arr[j]
        if n % 3 == 0 and n % 10 == 1:
            arr1.append(n)
            break
print(max(arr1)) 
→ Ссылка