Нахождение самого часто повторяющегося (повторяющихся) значений в массиве
В массиве надо найти самое(самые) часто повторяющееся(повторяющиеся) числа.
При этом нужно вывести всех их, если есть одинаковое число повторяющихся: массив "1 8 3 4 4 1", то должно быть выведено: 1 1 4 4.
А если только одно значение повторяется много раз, то из них должно быть выведено только одно. массив "2, 2, 2, 5, 7", ответ: 2.
Если повторяющихся совсем нет то ничего не должно вывестись.
У меня только 2 пункт не выполняется, как можно исправить? Код на с++.
int main()
{
int max{}, postmax{}, index{}; const int n = 5; bool flag = false;
int mas[n] = { 1, 2, 3, 4, 5 };
for (int i = 0; i < n; i++)
{
for (int j = 0; j < n; j++)
{
if (i == j) continue;
if (mas[i] == mas[j])
{
postmax++;
}
}
if (postmax > max) {
max = postmax;
index = i;
flag = true;
}
else {
if (postmax == max && max != 0) {
cout << mas[index] << endl;
index = i;
}
}
postmax = 0;
}
if (flag) cout << mas[index] << endl;
return 0;
}
Ответы (1 шт):
раз можно использовать c++ (и стандартные библиотеки соответственно), то я бы делал в лоб
использовал бы словарь
std::map<int, int>прошелся бы по всем числам в массиве и если числа нет в словаре, добавлял бы
(число, 1)иначе увеличивал бы значение, соответствующее числу
после этого в словаре содержатся числа и сколько раз они встречаются
дальше прошел бы по всем ключам слова и определил бы 1 из 3х состояний - вообще нет повторений (все значения равны 1), есть одно повторение (только одно значение больше 1), есть несколько повторений
на основании шага 3) вывел бы соответствующий результат