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ś?
- Wyszukaj maksimum. Usuń. Wyszukaj maksimum. :P
- Wyszukując maksimum zapamiętuj też drugą wartość ;]
Niestety wciąż nie wiem jak to zrobić.Jak to usunąć? :)
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.
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:)
A jak cała macierz ma te same wartości? :P Albo jak maksimum się powtarza?
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;
}
}