Szukanie drugiego maksimum

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ś?

0
  1. Wyszukaj maksimum. Usuń. Wyszukaj maksimum. :P
  2. Wyszukując maksimum zapamiętuj też drugą wartość ;]
0

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

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.

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:)

0

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

0

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

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;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1