1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 37
|
|
1 | |
Наибольшее произведение трех чисел22.11.2016, 22:39. Показов 37005. Ответов 11
Метки нет (Все метки)
Задача: В данном списке из n ≤ 105 целых чисел найдите три числа,произведение которых максимально.
Решение должно иметь сложность O(n), где n - размер списка. Выведите три искомых числа в любом порядке. Примеры: Ввод: 3 5 1 7 9 0 9 -3 10 Вывод: 10 9 9 Ввод: -5 -30000 -12 Вывод: -5 -12 -30000 Ввод: 1 2 3 Вывод: 3 2 1 Вопрос: как это реализовать? (использовать sort\sorted от всего массива не получается, потому что тогда программа не проходит по времени)
0
|
22.11.2016, 22:39 | |
Ответы с готовыми решениями:
11
Наибольшее произведение трех чисел Наибольшее из трёх чисел по модулю Найти сумму, произведение и среднее арифметическое трёх целых чисел, введённых с клавиатуры Если сумма трех попарно различных действительных чисел х, у , z меньше единицы, то наименьшее из этих трех чисел заменит |
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 897
|
|
22.11.2016, 22:51 | 2 |
ну смотрите: вы задачу поиска максимума можете решить? можете. бежите по списку, и присваиваете переменной максимальное значение. а теперь также ищите 3 максимальных значения. т.е. 3 вспомогательных переменных и все. вот вам и o(n).
Добавлено через 6 минут п.с. не смотря на то, что в цикле получается 3 условия, o(n) сохраняется, потому что в каждой итерации верной может быть только одно: если элемент больше максимального, максимальное = элемент. иначе, если элемент больше второго максимального, то второе по максимальное = элементу. если третье меньше элемента, третье = элементу.
1
|
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
|
|
23.11.2016, 00:28 | 3 |
0
|
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 897
|
|
23.11.2016, 00:43 | 4 |
если по циклу пройтись 3 раза, то будет o(n^3).
0
|
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
|
||||||
23.11.2016, 03:43 | 5 | |||||
Сообщение было отмечено Mon4ik как решение
Решение
О(n^3) будет только если пройтись по списку n^3 раз. Если пройтись 3 раза, будет O(3n) = O(n)
Добавлено через 1 час 47 минут
0
|
637 / 477 / 179
Регистрация: 28.05.2012
Сообщений: 1,414
|
||||||
23.11.2016, 07:34 | 6 | |||||
0
|
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
|
|
23.11.2016, 07:47 | 7 |
0
|
охотник
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
|
|||||||||||
23.11.2016, 08:12 | 8 | ||||||||||
0
|
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 37
|
|
23.11.2016, 21:46 [ТС] | 9 |
oldnewyear, спасибо, у вас самый понятный код) Только он не срабатывает для 2 и 3 примеров. Не нравится, что в 25 строке индекс = 0. Почему?
0
|
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
|
|
23.11.2016, 22:59 | 10 |
Надо сделать проверку в начале - если в списке только 3 числа, вывести их и завершить программу
0
|
0 / 0 / 0
Регистрация: 29.09.2017
Сообщений: 1
|
|
29.09.2017, 14:30 | 11 |
Достаточно найти три наибольших элемента (обзовём их m1, m2, m3) и два наименьших (n1, n2).
Тогда наибольшее произведение будет либо m1 * m2 * m3 либо m1 * n1 * n2. Наибольшие/наименьшие элементы можно выбрать за один проход - O(n).
0
|
0 / 0 / 0
Регистрация: 15.11.2017
Сообщений: 1
|
|
10.01.2018, 14:15 | 12 |
при данных: 1 9 -10 -20 -8 7 14 0 20 20 -20 должны получить: -20 -20 20, а сортировка выдает 20 20 14.
не подходит.
0
|
10.01.2018, 14:15 | |
10.01.2018, 14:15 | |
Помогаю со студенческими работами здесь
12
Наибольшее произведение трех чисел Сумма, произведение и среднее арифметическое трёх целых чисел Если сумма трех попарно различных вещественных x, y, z < 1, то наименьшее из этих трех чисел заменить полусуммой двух Вычислить произведение P кубов трех чисел a, b и c, если их сумма меньше нуля, произведение P модулей трех чисел a, b и c, если их сумма больше нуля Переменной d присвоить наибольшее из трех чисел, а переменной s наименьшее из трех чисел. Найти наибольшее из трех чисел, используя процедуру нахождения наибольшего из 2 чисел. Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |