![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 29.09.2011
Сообщений: 9
|
![]()
Здраствуйте,такая вот задача
Дано N целых чисел. Требуется выбрать из них три таких числа, произведение которых максимально. Формат входных данных Во входном файле записано сначала число N - количество чисел в последовательности (3<=N<=100). Далее записана сама последовательность: N целых чисел, по модулю не превышающих 1000. Формат выходных данных В выходной файл выведите три искомых числа в любом порядке. Если существует несколько различных троек чисел, дающих максимальное произведение, то выведите любую из них. я думал решить найдя,просто самые максимальные число,с помощью трех циклов, типа самый максимальный элемент в 1 вом цикле не может быть использован во 2 ром и т.д для третьего...подскажите как сделать,но простым языком как я пишу. и там в задаче берется в модуль. но я пока что не брал чтобы просто посмотреть как будет работать мой код Код Код:
Последний раз редактировалось alex_fcsm; 02.10.2011 в 23:41. |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
проще, имхо, отсортировать массив по убыванию.
и взять первые три числа из образованного массива. p.s. можно и без сортировки обойтись. И даже за один проход решить задачу. Но алгоритм такой должен быть. Нужно где-то хранить три индекса найденных максимальных значений (вначале все три индекса положить какому-то невозможному индексу. ну, например, в вашем случае, вначале все индексы положить равными -1). И дальше, сравнивать очередное число, размещает индексы очередных элементов по степени возрастания величин соответствующих им значений в массиве. При необходимости "сдвигая" остальные среди этих трёх максимальных. понимаю, что написал запутанно... ![]() |
![]() |
![]() |
![]() |
#3 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,542
|
![]() Цитата:
Цитата:
-10000 -1 1 2 3 4 5 6 7 -10000 * -1 * 7 =70000 НАИБОЛЬШЕЕ произведение ТРЕХ. 5 * 6 * 7 = 210 произведение трех максимальных. надо еще добавить проверку двух наименьших отрицательных и одного максимального положительного. И еще пожалуй случай когда в эти три максимальные(минимальные) попадет 0. Цитата:
Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 03.10.2011 в 11:46. |
|||
![]() |
![]() |
![]() |
#4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
![]()
согласен с замечанием.
хорошая задачка! ну тогда лучше, имхо, сортировать по модулям. И выбирать сложнее прийдётся, пропуская некоторые числа и анализируя другие, например, так, чтобы если есть выбор - отрицательных брать пару. А если оно (отрицательное число - одно - игнорировать!) и, похоже, всё таки, в некоторых случаях прийдётся перебирать варианты из отсортированного массива... впрочем. я вижу всего несколько вариантов. если произведение первых трёх чисел имеет положительный знак - ответ очевиден. иначе, надо сравнить произведения P1:= первое отрицательное числа из этих трёх * на первое положительное число из 3-х и на первое встречное отрицательное число (оно может быть в отсортированном массиве на любом месте, хоть крайнее!) и P2: произведение первых трёх положительных чисел с верхушки массива... p.s. возможно, что есть ещё какой-то вариант. но от тут же, рядом с верхушкой отсортированного массива... |
![]() |
![]() |
![]() |
#5 |
Lawful Evil
Участник клуба
Регистрация: 13.05.2008
Сообщений: 1,208
|
![]()
Не претендую на оригинальность, но я бы предложил проверить в отсортированном массиве две тройки, если отрицательных чисел больше, чем два, и одну - если их меньше, либо число положительных чисел меньше трех.
Если отрицательных >2, то сравниваем произведение двух наименьших отрицательных и наибольшего положительного с произведением трех последних положительных. Если же отрицательных чисел одно или вообще нет, то просто смотрим произведение максимальных положительных. Если положительных одно или два - берем тройку, состоящую из двух наименьших отрицательных + наибольшее положительное. Ну и, конечно же, надо предусмотреть вариант, что все числа отрицательны. Тогда берем произведение трех максимальных.
Алгоритм - бесплатен. Поиск багов - бесплатен. Реализация алгоритма - за отдельную плату.
На форуме помогают советами и объясняют, а не пишут на халяву программы, лабы, курсачи и т.д. (c) Последний раз редактировалось Vanta11a; 03.10.2011 в 13:29. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Как узнать самое большое число в столбце? | Dux | БД в Delphi | 7 | 04.09.2011 21:22 |
Найти произведение цифр данного числа | chertovka. | Помощь студентам | 2 | 25.06.2010 11:59 |
Паскаль АВС - найти самое большое из четырёх чисел | Dante123 | Помощь студентам | 4 | 14.04.2009 17:42 |
Найти все целые числа,у которых ровно 6 делителей; | jenja | Общие вопросы C/C++ | 3 | 03.10.2008 20:32 |
ДАНЫ 4 ЧИСЛА X Y Z W составит программу найти произведение все положительные нечетные числа | Woland-itn | Паскаль, Turbo Pascal, PascalABC.NET | 3 | 23.03.2008 21:49 |