Матч
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;
}
};