| 
| 
 | Вопрос # 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) Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |