Szukanie drugiego maksimum

Szukanie drugiego maksimum
  • Rejestracja: dni
  • Ostatnio: dni
0

Witam
Mógłby mnie ktoś naprowadzić lub pokazać jak należy szukać drugiej maksymalnej wartości w danej macierzy.
Szykanie minimum lub maksimum wiem jak zrobić ale znajdowanie 2 maksimum już mi nie wychodzi.
Pomoże ktoś?

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0
  1. Wyszukaj maksimum. Usuń. Wyszukaj maksimum. :P
  2. Wyszukując maksimum zapamiętuj też drugą wartość ;]
  • Rejestracja: dni
  • Ostatnio: dni
0

Niestety wciąż nie wiem jak to zrobić.Jak to usunąć? :)

SI
  • Rejestracja: dni
  • Ostatnio: dni
0

Szukasz jak maksimum, ale potrzebujesz dodatkowej zmiennej na największą liczbę mniejszą niż maksimum. I właśnie ona będzie twoim wynikiem. W zasadzie masz 3 możliwości w algorytmie:
sprawdzana wartość jest mniejsza niż obie zmienne - nic się nie dzieje
sprawdzana wartość jest większa niż "wynik" ale mniejsza niż aktualne maksimum - wynik = sprawdzania wartość
sprawdzana wartość jest większa niż aktualne maksimum - wynik = aktualne maksimum, aktualne maksimum = sprawdzana wartość.

ps zakładam naturalnie że kilkukrotnie wystąpienie maksimum nic nie zmienia, i dalej potrzebujemy mniejszej wartości. No chyba że wszystkie są takie same. Ale to już zależy od szczegółów zadania.

  • Rejestracja: dni
  • Ostatnio: dni
0

Dzięki wszystkim ale zrobiłem inaczej.
Najpierw mam zwykłą pętle do szukania maksimum a później pętle do szukania maksimum 2 (taką samą jak wcześniejsza) jednakże w "if" dodałem dodatkowy warunek że np. A[i][j]!=max1.
W każdym razie działa:)

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

A jak cała macierz ma te same wartości? :P Albo jak maksimum się powtarza?

MarekR22
  • Rejestracja: dni
  • Ostatnio: dni
0

dla ogólnego przypadku jest algorytm magicznych piątek.
dla drugiej maksymalnej wartości:

Kopiuj
int firstMax = std::numeric_limits<int>::min();
int secondMax = firstMax;
for (int j=0; j<n; ++j)
for (int i=0; i<n; ++i) {
    const int x = m[i][j];
    if (x>firstMax) {
         secondMax = firstMax;
         firstMax = x;
    } else if (x>secondMax) {
         secondMax = x;
    }
}

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.