|
Вопрос # 2 861/ вопрос решён / |
|
Здравствуйте, эксперты!
помогите пожалуйста!!!!
как найти в одномерном массиве наибольшее произведение трех элементов??? застрял на том месте, как надо находить наибольшие второй и третий элементы
Приложение: Переключить в обычный режим- program Project1;
-
- {$APPTYPE CONSOLE}
-
- uses
- SysUtils;
- {PROCEDURE proizv(var a:tmas);
- var i:integer;
- begin
- for i:=1 to n do
- if
- end;}
-
- CONST n=10;
- TYPE TMas=ARRAY[1..n] of integer;
- var i,j,k,max,max1,max2:integer; a:TMas;
-
-
- PROCEDURE INPUT(var a:TMas);
- var i:integer;
- Begin
- Randomize;
- for i:=1 to n do
- a[i]:=Random(20)-10;
- End;
-
-
- PROCEDURE OUTPUT(var a:TMas);
- var i:integer;
- Begin
- for i:=1 to n do write(a[i]:4,' ');
- End;
-
- PROCEDURE MAXIMUM( var a:TMas);
- var i,max:integer;
- BEGIN
- i:=j;
- i:=k;
-
- for i:=1 to n-1 do
- if a[i]>0 then max:=a[i];
- for i:=1 to n do
- if a[i]>max then
- max:=a[i];
-
- for j:=1 to n-2 do
- if a[j]>0 then max1:=a[j];
- if (a[j]>max1) and (a[j]<=max) then max1:=a[j];
-
-
- for k:=1 to n do
- if a[k]>0 then max2:=a[k];
- if (a[k]>max2) and (a[k]<=max) and (a[k]<=max1) then max2:=a[i];
- writeln;
- WRITELN('max(a[i])= ',max,' ',max1,' ',max2);
- END;
-
- begin
- input(a);
- writeln;
- output(a);
- maximum(a);
- readln;
- end.
-
 |
Вопрос задал: I{ () T (статус: Посетитель)
Вопрос отправлен: 29 мая 2009, 11:13
Состояние вопроса: решён, ответов: 2.
|
Ответ #1. Отвечает эксперт: Пупкин В В
Здравствуйте, I{ () T!
алгаритм решения
прогоняешь массив 3 раза каждый раз находя и запоминая наибольшее и заменяя его на 0
умножаешь 3 запомненых самых больших.
 |
Ответ отправил: Пупкин В В (статус: 2-ой класс)
Время отправки: 29 мая 2009, 11:25
Оценка за ответ: 5
Комментарий к оценке: спасибо))) только там могут быть отрицательные
|
Ответ #2. Отвечает эксперт: Вадим К
Здравствуйте, I{ () T!
Предлагаю два варианта решения.
Я бы решил так - отсортировал массив по убыванию и взял три первых элемента.
Способ два.
когда нашли первый элемент, запоминаем его индекс. Когда ищем второй, то избегаем этого индекса.
//in1 - интекс первого максимального
//in2 - индекс второго максимально
in2 := 1;
for j:=2 to n do
if (a[j]>a[in2]) and (in2 <> in1) then in2 := j;
Для третьего элемента надо ещё одно условия на проверку индекса.
С индексами удобнее работать, так как если к примеру хочеться искать среди структур, то они уже дают приимущество.
Можно ещё один способ предложить.
Вначале найти минимальный элемент.
Потом искать максимальный, запомнить его и заменить в массиве на минимальный. Потом снова можно искать максимальный - это будет второй элемент...
 |
Ответ отправил: Вадим К (статус: Академик)
Время отправки: 29 мая 2009, 11:28
Оценка за ответ: 5
Комментарий к оценке: спасибо большое!!! на мой взгляд с сортировкой самый удобный метод)))
|
Мини-форум вопроса
Всего сообщений: 3; последнее сообщение — 30 мая 2009, 12:53; участников в обсуждении: 3.
|
Пупкин В В (статус: 2-ой класс), 29 мая 2009, 11:31 [#1]:
не подумал о наличии отрицательных чисел.
заменяешь не на ноль а на заведомо наименьшее число
|
|
Dron (статус: Студент), 30 мая 2009, 12:39 [#2]:
Вам нужно найти наибольшее произведение трёх элементов или произведение трёх наибольших элементов?
С уважением.
|
|
Вадим К (статус: Академик), 30 мая 2009, 12:53 [#3]:
Навряд ли, задачка заметно усложняется. Придется реализовать перебор. Хотя если все числа положительные - задача решается как выше. Если есть хотя бы 2 отрицательные - стает веселее.
Галочка "подтверждения прочтения" - вселенское зло.
|
31 января 2011, 19:36: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|