Матч 258, Оценки в классе (ClassScores)

Дивизион 2, Уровень 1

 

В массиве scores заданы оценки учеников класса, полученные за выполнение теста. Учитель хочет определить оценку, которая встречалась чаще всего. Если таких оценок несколько, то вывести их все в порядке возрастания.

 

Класс: ClassScores

Метод: vector<int> findMode(vector<int> scores)

Ограничения: scores содержит от 1 до 50 элементов, каждый из которых лежит в промежутке от 0 до 100.

 

Вход. Массив чисел scores, содержащий оценки учеников класса.

 

Выход. Массив, содержащий чаще всего встречаемые оценки в классе.

 

Пример входа

scores

{65, 70, 88, 70}

{88, 70, 65, 70, 88}

{92, 56, 14, 73, 22, 38, 93, 45, 55}

 

Пример выхода

{70}

{70, 88}

{14, 22, 38, 45, 55, 56, 73, 92, 93}

 

 

РЕШЕНИЕ

обработка массива

 

Поскольку количество разных оценок ограничено, заведем массив c, в котором c[i] равно количеству учеников, которое получили за тест оценку i. В переменной max находим наибольшее значение, которое встречается в массиве c. Равенство c[i] = max означает, что оценку i получило наибольшее количество учеников. Просматриваем все ячейки массива c и заносим в результирующий вектор res все такие индексы i, для которых c[i] = max.

 

ПРОГРАММА

 

#include <cstdio>

#include <vector>

#include <algorithm>

using namespace std;

 

class ClassScores

{

public:

  vector<int> findMode(vector<int> scores)

  {

    int i, max;

    vector<int> res, c(101,0);

    for(i = 0; i < scores.size(); i++) c[scores[i]]++;

    max = c[max_element(c.begin(),c.end()) - c.begin()];

    for(i = 0; i < 101; i++)

      if (c[i] == max) res.push_back(i);

    return res;

  }

};