Ошибка в переборном алгоритме 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 шт):
"Требуется определить максимальное произведение двух элементов массива, кратное 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)
место
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))