Помогите составить алгоритм на python для подбора значений
Есть такое выражение:
res = a[i] * b[j] + b[i] * a[j]
при этом 1 <= i < j <= n. a и b - два массива. n - целое число, количество элементов в массиве, вводиться пользователем. Необходимо найти такие значения i и j, чтобы результат выражения был максимальным. Таблицы значений(рассчитаны вручную):
n = 3
a = 5, 4, 6
b = 1, 2, 3
результат = 24
n = 5
a = 2 3 4 4 5
b = 5 4 4 3 1
результат = 28
Заранее спасибо за внимание!!
Ответы (2 шт):
Автор решения: roddar92
→ Ссылка
Для одного массива алгоритм будет прост:
arr1 = [2, 1, 5, 3, 8, -1, 3]
arr2 = [-1, 3, 5, 6, 0, -1, 5]
max_product, i_pos, j_pos = arr1[0], 0, 0
for i, el in enumerate(arr1):
for j, el2 in enumerate(arr2):
if el * el2 + arr1[j] * arr2[i] > max_product:
max_product = el * el2 + arr1[j] * arr2[i]
i_pos, j_pos = i, j
print(i_pos, j_pos, max_product)
Ответ: 2, 2, 50
Автор решения: Harry
→ Ссылка
Я бы все же делал так (в меру моего незнания python):
mx = arr1[0]*arr2[1]+arr2[0]*arr1[1]
ip = 0
jp = 1
for i in range(0, len(arr1)):
for j in range(i+1, len(arr2)):
r = arr1[i]*arr2[j]+arr2[i]*arr1[j]
if r > mx:
mx = r
ip = i
jp = j
print(ip,jp,mx)
Просто для сравнения с ответом roddar92 - судите о правильности сами - https://ideone.com/bHNQYT