Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 861

/ вопрос решён /

Здравствуйте, эксперты!
помогите пожалуйста!!!!
как найти в одномерном массиве наибольшее произведение трех элементов??? застрял на том месте, как надо находить наибольшие второй и третий элементы

Приложение:
  1. program Project1;
  2.  
  3. {$APPTYPE CONSOLE}
  4.  
  5. uses
  6. SysUtils;
  7. {PROCEDURE proizv(var a:tmas);
  8. var i:integer;
  9. begin
  10. for i:=1 to n do
  11. if
  12. end;}
  13.  
  14. CONST n=10;
  15. TYPE TMas=ARRAY[1..n] of integer;
  16. var i,j,k,max,max1,max2:integer; a:TMas;
  17.  
  18.  
  19. PROCEDURE INPUT(var a:TMas);
  20. var i:integer;
  21. Begin
  22. Randomize;
  23. for i:=1 to n do
  24. a[i]:=Random(20)-10;
  25. End;
  26.  
  27.  
  28. PROCEDURE OUTPUT(var a:TMas);
  29. var i:integer;
  30. Begin
  31. for i:=1 to n do write(a[i]:4,' ');
  32. End;
  33.  
  34. PROCEDURE MAXIMUM( var a:TMas);
  35. var i,max:integer;
  36. BEGIN
  37. i:=j;
  38. i:=k;
  39.  
  40. for i:=1 to n-1 do
  41. if a[i]>0 then max:=a[i];
  42. for i:=1 to n do
  43. if a[i]>max then
  44. max:=a[i];
  45.  
  46. for j:=1 to n-2 do
  47. if a[j]>0 then max1:=a[j];
  48. if (a[j]>max1) and (a[j]<=max) then max1:=a[j];
  49.  
  50.  
  51. for k:=1 to n do
  52. if a[k]>0 then max2:=a[k];
  53. if (a[k]>max2) and (a[k]<=max) and (a[k]<=max1) then max2:=a[i];
  54. writeln;
  55. WRITELN('max(a[i])= ',max,' ',max1,' ',max2);
  56. END;
  57.  
  58. begin
  59. input(a);
  60. writeln;
  61. output(a);
  62. maximum(a);
  63. readln;
  64. end.
  65.  


I{ () T Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: 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

Dron (статус: Студент), 30 мая 2009, 12:39 [#2]:

Вам нужно найти наибольшее произведение трёх элементов или произведение трёх наибольших элементов?
С уважением.
Вадим К

Вадим К (статус: Академик), 30 мая 2009, 12:53 [#3]:

Навряд ли, задачка заметно усложняется. Придется реализовать перебор. Хотя если все числа положительные - задача решается как выше. Если есть хотя бы 2 отрицательные - стает веселее.
Галочка "подтверждения прочтения" - вселенское зло.

31 января 2011, 19:36: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 12:01
Выполнено за 0.02 сек.