Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2018, 21:04   #1
Wellshumor
 
Регистрация: 18.09.2018
Сообщений: 3
По умолчанию Как найти второй по величине элемент массива?

Дана задача и в ней надо найти максимальный элемент и элемент второй по величине. Максимальный найти могу сам, а вот второй... Помогите, пожалуйста
Wellshumor вне форума Ответить с цитированием
Старый 21.09.2018, 23:59   #2
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Код:
size_t max1 = 0;
size_t max2 = 0;
for(size_t i = 1; i<n; ++i)
{
   if(a[i]>a[max1])
   {
      max2 = max1;
      max1 = i;
   }
}
// a[max1], a[max2] — максимумы.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 22.09.2018, 06:38   #3
NetSpace
Участник клуба
 
Аватар для NetSpace
 
Регистрация: 03.06.2009
Сообщений: 1,792
По умолчанию

ага, и если в массиве есть, скажем, два максимальных значения (50, 50, 45, 10, 17, 9, 23), то он вам выдаст не второй по величине а такой же. ведь 50 и 50 одинаковы.
вы просто введите второй максимум. max2:=max1 - 1, который на единицу меньше. в моём случае это должно быть 45
Программирование - это единственный способ заставить компьютер делать то, что тебе хочется, а не то, что приходится.
NetSpace вне форума Ответить с цитированием
Старый 24.09.2018, 00:35   #4
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

NetSpace, с моей точки зрения, второй максимум в предложенном тобой варианте как раз 50. 45 — это уже третий.
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Старый 24.09.2018, 09:17   #5
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
1. max1=0; max2:=0; //или точнее будем РАССТАВЛЯЕМ в порядке большинства ПЕРВЫЕ два индекса
2.
  if a[i]>a[max1] //новый элемент самый большой
  {  max2=max1; // меняем второй максимум на СТАРЫЙ первый
    max1=i; } //новый САМЫЙ максимальный
  else // он не самый большой НО все еще может быть
        if a[i]>a[max2] // новый элемент есть второй по величине
  {  // max1 не трогаем 
     max2=i; } // новый второй по величине
3. и конечно ЦИКЛ для i=3(пропуская первые два см.п.1.)
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 24.09.2018 в 09:20.
evg_m на форуме Ответить с цитированием
Старый 24.09.2018, 11:16   #6
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Цитата:
max1=0; max2:=0; //или точнее будем РАССТАВЛЯЕМ в порядке большинства ПЕРВЫЕ два индекса
Никогда не используйте инициализацию элементов значениями подобным способом. Весьма вероятно, что ваши значения не будут принадлежат множеству испытываемых значений, что может привести к ошибочному решению. Можно, например, так:
Код:
max1 := a[1];
max2 := a[2];
if a[1] < a[2] then
begin
   max1 := a[2];
   max2 := a[1];
end;
, что по-видимому и имелось ввиду во фразе :
Цитата:
//или точнее будем РАССТАВЛЯЕМ в порядке большинства ПЕРВЫЕ два индекса
И цикл, соответственно, надо начинать с третьего элемента (в этой задаче).
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 24.09.2018, 11:23   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от ViktorR Посмотреть сообщение
Никогда не используйте инициализацию элементов значениями подобным способом. Весьма вероятно, что ваши значения не будут принадлежат множеству испытываемых значений
Вы ошибаетесь.
Вы не поняли, что max1 и max2 - это не значения максимальных элементов, а их ИНДЕКСЫ.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.09.2018, 19:55   #8
ViktorR
Старожил
 
Регистрация: 23.10.2010
Сообщений: 2,304
По умолчанию

Спасибо, увидел.
Просто достаточно часто в примерах подобного типа инициализируют начальное значение нулём, вот и "застрял" ...
Как-то так, ...
ViktorR вне форума Ответить с цитированием
Старый 27.09.2018, 20:09   #9
Сергей Д
 
Регистрация: 27.09.2018
Сообщений: 6
По умолчанию

1. Отсортировать по убыванию, взять 2-й элемент
2. Цикл 1 - найти максимальный среди всех. Цикл 2 - найти максимальный среди всех, который не равен найденному на шаге 1.
Сергей Д вне форума Ответить с цитированием
Старый 28.09.2018, 00:33   #10
New man
Форумчанин
 
Регистрация: 24.01.2011
Сообщений: 774
По умолчанию

Сергей Д, сортировать массив для получения двух элементов :\
a.k.a. Angelicos Phosphoros
Мой сайт
New man вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как найти второй максимальный элемент массива? ardamehr711 Помощь студентам 11 14.03.2018 19:39
Как найти второй минимальный элемент массива laketych Общие вопросы C/C++ 2 19.01.2017 11:40
ОДномерный массив, второй по величине элемент, как его найти? Алексей_2012 Общие вопросы C/C++ 7 07.11.2014 21:42
Найти второй по величине элемент массива (за два прохода; за один проход) (на Паскале) Мaрина Помощь студентам 2 26.09.2011 13:49
Найти второй по величине элемент (assembler) Rom@shka Помощь студентам 3 22.06.2009 20:07