Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.53/190: Рейтинг темы: голосов - 190, средняя оценка - 4.53
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 37

Наибольшее произведение трех чисел

22.11.2016, 22:39. Показов 39699. Ответов 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
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.11.2016, 22:39
Ответы с готовыми решениями:

Наибольшее произведение трех чисел
В данном списке из n≤10⁵ целых чисел найдите три числа,произведение которых максимально. Решение должно иметь сложность O(n), где n -...

Наибольшее из трёх чисел по модулю
Помогите, пожалуйста с решением задачи Напишите программу, которая считывает три числа и выводит наибольшее из них по модулю. В чем...

Найти сумму, произведение и среднее арифметическое трёх целых чисел, введённых с клавиатуры
Всем привет. На курсе попалось такое простецкое задание Напишите программу, которая находит сумму, произведение и среднее...

11
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
22.11.2016, 22:51
ну смотрите: вы задачу поиска максимума можете решить? можете. бежите по списку, и присваиваете переменной максимальное значение. а теперь также ищите 3 максимальных значения. т.е. 3 вспомогательных переменных и все. вот вам и o(n).

Добавлено через 6 минут
п.с. не смотря на то, что в цикле получается 3 условия, o(n) сохраняется, потому что в каждой итерации верной может быть только одно: если элемент больше максимального, максимальное = элемент. иначе, если элемент больше второго максимального, то второе по максимальное = элементу. если третье меньше элемента, третье = элементу.
1
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
23.11.2016, 00:28
Цитата Сообщение от minore Посмотреть сообщение
п.с. не смотря на то, что в цикле получается 3 условия, o(n) сохраняется, потому что в каждой итерации верной может быть только одно: если элемент больше максимального, максимальное = элемент. иначе, если элемент больше второго максимального, то второе по максимальное = элементу. если третье меньше элемента, третье = элементу.
Можно по циклу 3 раза пройтись, все равно O(n) будет
0
370 / 133 / 44
Регистрация: 05.02.2015
Сообщений: 901
23.11.2016, 00:43
если по циклу пройтись 3 раза, то будет o(n^3).
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
23.11.2016, 03:43
Лучший ответ Сообщение было отмечено Mon4ik как решение

Решение

Цитата Сообщение от minore Посмотреть сообщение
если по циклу пройтись 3 раза, то будет o(n^3).
О(n^3) будет только если пройтись по списку n^3 раз. Если пройтись 3 раза, будет O(3n) = O(n)

Добавлено через 1 час 47 минут
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
numbers = [1,9,-10,-20,-8, 7, 14, 0, 20, 20, -20]
 
if len(numbers) < 3:
    print ('List should contain at least 3 numbers')
    exit (0)
 
nmax1 = numbers[0]
nmin1 = numbers[0]
 
for n in numbers:
    if n > nmax1: nmax1 = n
    if n < nmin1: nmin1 = n
 
numbers.remove(nmax1)
numbers.remove(nmin1)
nmax2 = numbers[0]
nmin2 = numbers[0]
 
for n in numbers:
    if n > nmax2: nmax2 = n
    if n < nmin2: nmin2 = n
 
numbers.remove(nmax2)
 
nmax3 = numbers[0]
 
for n in numbers:
    if n > nmax3: nmax3 = n
 
p1 = nmin1*nmin2*nmax1
p2 = nmax1*nmax2*nmax3
 
if p1 > p2:
    print (nmin1, nmin2, nmax1)
else:
    print (nmax1, nmax2, nmax3)
0
 Аватар для Vigi
641 / 481 / 179
Регистрация: 28.05.2012
Сообщений: 1,419
23.11.2016, 07:34
Python
1
print(*sorted(map(int, input().split()))[::-1][:3])
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
23.11.2016, 07:47
Цитата Сообщение от Vigi Посмотреть сообщение
Python
1
print(*sorted(map(int, input().split()))[::-1][:3])
Сортировка списка не укладывается в требование к временной сложности O(n)
0
охотник
 Аватар для vint-81
1011 / 535 / 650
Регистрация: 29.09.2014
Сообщений: 1,083
23.11.2016, 08:12
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
numbers = [1,9,-10,-20,-8, 7, 14, 0, 20, 20, -20]
 
max_1 = max(numbers[0],numbers[1])
min_1 = min(numbers[0],numbers[1])
max_2 = numbers[0]*numbers[1]
min_2 = numbers[0]*numbers[1]
max_3 = numbers[0]* numbers[1]*numbers[2]
 
for x in numbers[2:]:
    max_3 = max(max_3, x*max_2, x*min_2)
        max_2 = max(max_2, x*max_1, x*min_1)
        min_2 = min(min_2, x*max_1, x*min_1)
        max_1 = max(max_1,x)
        min_1 = min(min_1,x)
 
print(max_3)
Добавлено через 2 минуты
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
numbers = [1,9,-10,-20,-8, 7, 14, 0, 20, 20, -20]
 
max_1 = max(numbers[0],numbers[1])
min_1 = min(numbers[0],numbers[1])
max_2 = numbers[0]*numbers[1]
min_2 = numbers[0]*numbers[1]
max_3 = numbers[0]* numbers[1]*numbers[2]
 
for x in numbers[2:]:
        max_3 = max(max_3, x*max_2, x*min_2)
        max_2 = max(max_2, x*max_1, x*min_1)
        min_2 = min(min_2, x*max_1, x*min_1)
        max_1 = max(max_1,x)
        min_1 = min(min_1,x)
 
print(max_3)
0
1 / 1 / 0
Регистрация: 07.10.2015
Сообщений: 37
23.11.2016, 21:46  [ТС]
oldnewyear, спасибо, у вас самый понятный код) Только он не срабатывает для 2 и 3 примеров. Не нравится, что в 25 строке индекс = 0. Почему?
0
440 / 432 / 159
Регистрация: 21.05.2016
Сообщений: 1,338
23.11.2016, 22:59
Цитата Сообщение от Mon4ik Посмотреть сообщение
oldnewyear, спасибо, у вас самый понятный код) Только он не срабатывает для 2 и 3 примеров. Не нравится, что в 25 строке индекс = 0. Почему?
Надо сделать проверку в начале - если в списке только 3 числа, вывести их и завершить программу
0
0 / 0 / 0
Регистрация: 29.09.2017
Сообщений: 1
29.09.2017, 14:30
Достаточно найти три наибольших элемента (обзовём их 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
Цитата Сообщение от Vigi Посмотреть сообщение
Python
1
print(*sorted(map(int, input().split()))[::-1][:3])
при данных: 1 9 -10 -20 -8 7 14 0 20 20 -20 должны получить: -20 -20 20, а сортировка выдает 20 20 14.
не подходит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2018, 14:15
Помогаю со студенческими работами здесь

Если сумма трех попарно различных действительных чисел х, у , z меньше единицы, то наименьшее из этих трех чисел заменит
Если сумма трех попарно различных действительных чисел х, у , z меньше единицы, то наименьшее из этих трех чисел заменить полусуммой двух...

Наибольшее произведение трех чисел
В данном массиве из n целых чисел найдите три числа, произведение которых максимально. Решение должно иметь сложность O(n), где n -...

Сумма, произведение и среднее арифметическое трёх целых чисел
Напишите программу, которая находит сумму, произведение и среднее арифметическое трёх целых чисел, введённых с клавиатуры. Входные...

Если сумма трех попарно различных вещественных x, y, z < 1, то наименьшее из этих трех чисел заменить полусуммой двух
Если сумма трех попарно различных вещественных x, y, z &amp;lt; 1, то наименьшее из этих трех чисел заменить полусуммой двух других, в ...

Вычислить произведение P кубов трех чисел a, b и c, если их сумма меньше нуля, произведение P модулей трех чисел a, b и c, если их сумма больше нуля
Вычислить произведение P кубов трех чисел a, b и c, если их сумма меньше нуля, произведение P модулей трех чисел a, b и c, если их сумма...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru