Алгоритм по поиску максимального произведения трех чисел
Надо найти максимальное произведение трех чисел из массива. Я написал код, но на одном из этапов проверки есть ошибка. Можете помочь, сказав где ошибка (не могу найти сам) Мой код на python:
def max3(n, arr): max1 = 0 max2 = 1 max3 = 2 t = 1 while t: if ((arr[max1] arr[max2]): max1, max2 = max2, max1 if (arr[max2] > arr[max3]): max3, max2 = max2, max3 min1 = max1 min2 = max2 for i in range(3, n): if arr[max3] = arr[i]): min2 = min1 min1 = i elif (arr[min2] > arr[i]): min2 = i maxarr = arr[max1] * arr[max2] * arr[max3] minarr = arr[min1] * arr[min2] * arr[max3] if maxarr > minarr: print(maxarr) else: print(minarr) if __name__ == "__main__": k = int(input()) arr1 = input() nums = list(map(int, arr1.split(' '))) max3(k, nums)
Отслеживать
47.5k 17 17 золотых знаков 56 56 серебряных знаков 99 99 бронзовых знаков
задан 29 июл в 14:01
Андрей Урих Андрей Урих
13 3 3 бронзовых знака
Несколько вводов с неправильным ответом [1, 1, -2, 1, 1, 0, -3, 1] [-4, 1, -1, 0, -5, -4, -3, -5] [-4, 0, -4, -2, -1, -3, -1, -3] [-7, -2, -6, -1, -3, -1, -6, -3]
29 июл в 14:55
@MBo, спасибо, так намного легче найти ошибку. Начну искать.
29 июл в 15:02
Нашел ошибку, спасибо. Ошибка в условии if, скопировал и забыл изменить «` while t: if ((arr[max1] <= arr[max2]) and (arr[max1] <= arr[max2]) and (arr[max1] <= arr[max2])): t = 0 break if (arr[max1] >arr[max2]): max1, max2 = max2, max1 if (arr[max2] > arr[max3]): max3, max2 = max2, max3 «`=>
29 июл в 15:29
Никак не надо менять статус вопроса, достаточно того, что вы ответ отметили принятым.
11 авг в 11:56
1 ответ 1
Сортировка: Сброс на вариант по умолчанию
Алгоритм словами не описан, буду гадать. Можно предположить что после цикла while ожидается что значения возрастают: arr[max1]
def max3(n, arr): max1 = 0 max2 = 1 max3 = 2 t = 1 while t: if ((arr[max1] arr[max2]): max1, max2 = max2, max1 if (arr[max2] > arr[max3]): max3, max2 = max2, max3 print(arr[max1], arr[max2], arr[max3]) max3(3, [10, 20, 30]) max3(3, [10, 30, 20]) max3(3, [20, 10, 30]) max3(3, [20, 30, 10]) max3(3, [30, 10, 20]) max3(3, [30, 20, 10])
$ python test.py 10 20 30 10 30 20 10 20 30 20 30 10 10 20 30 10 20 30
В четырёх случаях сортировка удалась, в двух провалилась. Самый неприятный случай 20 30 10 . Давайте сделаем из него «плохой» пример: 20 30 10 15 . Неправильная сортировка приводит к тому что в первом if внутри for значения меняются так: было 20 30 10 , стало 30 10 15 (я напечатал не индексы а соответствующие значения). Произведение уменьшилось с 6000 до 4500.
Хорошие новости: главная идея верная. Надо подобрать три положительных побольше или одно положительное побольше и два отрицательных поменьше. Нужно уметь искать три максимума и два минимума.
Для поиска трёх максимумов будем поддерживать упорядоченный список из не более чем трёх элементов. Первоначально список пустой, новые элементы вставляются так чтобы порядок сохранялся. Если после вставки элементов больше трёх, первый (минимальный) удаляется:
def insert(a, v): a.append(v) for i in reversed(range(len(a) - 1)): if a[i] 3: max3.pop(0) return max3 def get_min2(a): min2 = [] for v in a: insert(min2, v) if len(min2) > 2: min2.pop() return min2 def main(): input() # skip n a = tuple(map(int, input().split())) max3 = get_max3(a) min2 = get_min2(a) print(max( max3[0] * max3[1] * max3[2], max3[2] * min2[0] * min2[1] )) main()
P.S. get_max3 и get_min2 через sorted :
def get_max3(a): max3 = [] for v in a: max3 = sorted(max3 + [v])[-3:] return max3 def get_min2(a): min2 = [] for v in a: min2 = sorted(min2 + [v])[:2] return min2
P.P.S. Встроенный модуль heapq умеет делать всё из коробки — heapq.nlargest, heapq.nsmallest:
import heapq input() # skip n a = tuple(map(int, input().split())) max3 = heapq.nlargest(3, a) min2 = heapq.nsmallest(2, a) print(max( max3[0] * max3[1] * max3[2], max(max3) * min2[0] * min2[1] ))
Помогите! Найти произведение трех чисел
Найти произведение трех чисел, если их сумма, сумма их квадратов и сумма их кубов равны 1
Не ответ, а имено логика рассуждения.
Очень нужно! ПОМОГИТЕ!
Лучший ответ
Рассуждение такое:
составлем по трём условиям три уравнения.
а + б + в = 1
а2 + б2 + в2 = 1
а3 + б3 + в3 = 1
Далее просто решаем систему из трёх уравнений с тремя неизвестными.
Остальные ответы
Психиатрия Их ТРИ сумм.. .
Не возможно чтобы сумма трех неодинаковых чисел была равна 1 в то же время когда квадраты этих неодинаковых чисел равны 1.
При этом же в системе и кубы равны единице. т. к. в математике предполагается а, в с- отличными друг от друга.
Безконечно малые величины.
логически поразмыслив, я думаю, что эти числа 1, 0 и 0.
потому что:
раз сумма квадратов равна сумме кубов, отрицательные числа отсекаются.
раз сумма равна сумме квадратов, числа меньше 1 тоже отсекаются.
а раз сумма равна 1, остается 1 вариант всего.
сумма 0 + 1 + 0 = 1
квадратов = 1
кубов = 1.
да хоть квартетов))))))) ) = 1
произведение тоже = 1 )))
Три числа есть — есть!)))
Достаточно последовательно возвести сумму в квадрат и куб и подумать с помощью головных мозгов:
1=(a+b+c)^2=a^2+b^2+c^2+2(ab+ac+bc)
ab+ac+bc=0
1=(a+b+c)^3=a^3+b^3+c^3+6abc+3(a^2b+ab^2+a^2c+ac^2+b^2c+bc^3)=1-3abc+3(a(ab+ac+bc)+b(ab+ac+bc)+c(ab+ac+bc))=1-3abc
abc=0
Можно, в принципе, и без раскрытия квадрата суммы.
(a+b+c)³ = a³+b³+c³ + 3ab² +3ac² + 3a²b + 3a²c +3bc² + 3b²c + 6abc =
= 1 + 3(ab² +ac² + a²b + a²c + b²c + bc²) + 6abc =
= 1 + 3(a(b² +c²) + b(a² + c²) + c(a² + b²)) + 6abc =
= 1 + 3(a(b²+c²+ a² — a²) + b(a²+c²+b² — b²) + c(a²+b²+c² — c²)) + 6abc =
= 1 + 3(a(1-a²) + b(1-b²) + c(1-c²)) + 6abc =
= 1 + 3(a+b+c -a³-b³-c³) + 6abc =
= 1 + 3(1 — 1) + 6abc =
= 1 + 6abc.
Произведение трех чисел каждое из которых равно 9 уменьшить на разность чисел 75 и 56
Для решения данной задачи, разберемся, что такое произведение и разность чисел. Произведением называется результат умножения двух чисел. Значит, чтобы найти произведение чисел, необходимо их умножить. Разность — это число, которое получается в результате вычитания двух чисел. Число, из которого мы вычитаем, называется уменьшаемое, а число, которое вычитаем, называется вычитаемое. Нам даны три числа, каждое из которых равно 9, необходимо найти их произведение и уменьшить его на разность чисел 75 и 56. Если говориться, что число необходимо « уменьшить на», значит, речь идет о вычитании. Запишем и выполним действия: (9 × 9 × 9) – (75 — 56) = 729 – 19 = 710. Ответ: в результате вычислений получили число 710.
- Связаться с нами
- Правила проекта
- Лицензионное соглашение
- Политика конфиденциальности
Найдите произведение трёх чисел,если первое равно 6/7,второе состовляет 7/18 от первого числа,а третье 0,2 от суммы первого и второго.
Известно, что a и b — целые числа. Точка А, соответствующая числу а, находится на расстоянии 7 единиц от начала координат числовой прямой. Точка Б, со … ответствующая числу 8, находится на расстоянии 14 единиц от начала. Сколько единиц может составлять длина отрезка АВ? Помогите пожалуйста
На стороне ВС прямоугольника ABCD, у которого АВ= 1.2, AD=1.7, отмечена точка Е так, что треугольник АВЕ равнобедренны Найдите ED