Witam, mam problem z napisaniem programu dotyczącego wydrukowania / uzyskania trzeciej co do wielkości liczby dowolnego ciągu, takiego że a1, a2....
Nie potrafię napisać tej części programu z porównaniem tych liczb. Nie jest powiedziane ile ten ciąg ma wyrazów to zależy od nas.
Dziękuję za pomoc
0
0
Mógłbyś podać jakiś przykład?
0
Najłatwiej ten ciąg posortować malejąco po otrzymaniu i wypluć trzeci element.
Chyba, że jest jeszcze jakaś zależność, o której nie napisałeś.
Co do sortowania, poszukaj algorytmów, bo są ogólnodostępne, wraz z przykładowym kodem.
0
#include <iostream>
#include <set>
#include <iterator>
#include <vector>
#include <functional>
using namespace std;
template<typename C,
typename T = typename
C::value_type>
T third_max_element(const C& coll)
{
set<T, greater<T>> ret;
for(const auto& el : coll)
{
ret.insert(el);
if(ret.size() > 3u)
ret.erase(prev(ret.end()));
}
return *ret.crbegin();
}
int main() {
vector<int> nums{1,4,9,3,2,8,7};
cout << third_max_element(nums) << endl;
return 0;
}
Można jeszcze dodać drugi argument, do określenia n
tego maksymalnego elementu
template<typename C,
typename T = typename
C::value_type>
T nth_max_element(const C& coll, size_t nth_element)
{
set<T, greater<T>> ret;
for(const auto& el : coll)
{
ret.insert(el);
if(ret.size() > nth_element)
ret.erase(prev(ret.end()));
}
return *ret.crbegin();
}
0
Nie ma potrzeby wczytywania całego wejścia naraz. @YooSy podał algorytm on-line działający z małą stałą ilością pamięci roboczej. Trzeba tylko zmienić vector na jakiś strumień (czyli np wczytywanie liczb z std::cin).