Zadanie 18 – Ruletka

Wojtek lubi grać w ruletkę. Ostatnio doszedł do wniosku, że niektóre liczby wypadają częściej, a inne rzadziej. Postanowił zapisywać wyniki kolejnych losowań, a następnie postawić na liczbę, która wypadła najwięcej razy. Pomóż mu wybrać tę liczbę.
Wejście:
w pierwszym wierszu wejścia znajduje się liczba n oznaczająca liczbę losowań. W drugiej linii znajduje się n - liczb ze zbioru [0,1, …, 36] oznaczających kolejne wyniki losowań ruletki.
Wyjście:
Program powinien wypisać liczbę, która najczęściej wypadała na ruletce. W przypadku, gdy kilka liczb wypadało tyle samo razy, program powinien wypisać największą z nich.
Przykład:
Dla danych wejściowych:

8
35 36 0 5 0 35 1 17
Poprawną odpowiedzią jest:

35
plik:
94
8 33 1 27 29 11 27 9 17 11 5 25 24 31 14 15 34 7 34 32 1 14 31 13 5 36 5 22 32 19 33 13 12 15 15 24 11 18 33 21 34 12 0 28 34 34 1 36 15 25 22 1 15 3 29 11 21 32 28 2 23 35 17 17 35 6 26 20 10 6 18 15 31 12 14 20 11 3 22 33 7 18 23 17 18 14 12 5 17 28 3 9 17 33
w c++


Odpowiedź :

Odpowiedź:

#include <iostream>

#include <algorithm>

#include <map>

int main() {

   int n, a;

   std::cin >> n;

   std::map<int, int> occurMap;

   for (int i = 0; i < n; i++) {

       std::cin >> a;

       occurMap[a]++;

   }

   int maxOccur = std::max_element(occurMap.begin(), occurMap.end(),

                                   [](const std::pair<int, int> &a, const std::pair<int, int> &b) {

                                       return a > b;

                                   })->second;

   int maxNumberMaxOccur = -1;

   for (const auto &[number, occur]: occurMap) {

       if (occur == maxOccur) {

           maxNumberMaxOccur = std::max(number, maxNumberMaxOccur);

       }

   }

   std::cout << maxNumberMaxOccur;

   return 0;

}

Wyjaśnienie:

Użyłem structured bindings więc musisz mieć C++17 już nowszy aby program się skompilował