В массиве целых чисел с количеством элементов п найти наиболее часто
встречающееся число. Если таких чисел несколько, то определить наименьшее из них.
C/C++
Помогите написать код на С++
Не вижу почему-то ни одного ответа! Где все программисты, когда такие интересные вопросы как раз по такой довольно хорошей алгоритмике? Мой код ещё нуждается в рационализации и поэтому может подтормаживать при длине массива n~1000000, зато хотя бы работает правильно и вот он весь целиком (с рандомным динамическим массивом и вектором двухкомпонентной структуры):
#include <iostream>
#include <cstdlib>
#include <vector>
#include <ctime>
using namespace std;
int main()
{
long i, j = 0, k, l = 1, m, n;
struct dict
{
long number;
long quantity;
};
dict c;
cout << "n: ";
cin >> n;
m = n / 10 + 1;
vector <dict> b;
srand(time(nullptr));
long *a = new long[n];
for (i = 0; i < n; i++)
a[i] = rand() % m;
if (j)
cout << endl;
c.number = a[0];
j = 0;
for (i = 0; i < n; i++) if (a[i] == a[0]) j++;
c.quantity = j;
b.push_back(c);
for (i = 0; i < n; i++)
{
k = 0;
for (j = 0; j < b.size(); j++)
if (b[j].number == a[i])
{
k++;
break;
}
if (k) continue;
for (j = i; j < n; j++)
if (a[i] == a[j]) k++;
c.number = a[i];
c.quantity = k;
b.push_back(c);
}
for (i = 0; i < b.size(); i++)
if (b[i].quantity > l)
{
l = b[i].quantity;
k = i;
}
k = a[k];
for (i = 0; i < b.size(); i++)
if (b[i].quantity == l)
if (b[i].number < k) k = b[i].number;
cout << k << ' ' << l;
}
#include <iostream>
#include <cstdlib>
#include <vector>
#include <ctime>
using namespace std;
int main()
{
long i, j = 0, k, l = 1, m, n;
struct dict
{
long number;
long quantity;
};
dict c;
cout << "n: ";
cin >> n;
m = n / 10 + 1;
vector <dict> b;
srand(time(nullptr));
long *a = new long[n];
for (i = 0; i < n; i++)
a[i] = rand() % m;
if (j)
cout << endl;
c.number = a[0];
j = 0;
for (i = 0; i < n; i++) if (a[i] == a[0]) j++;
c.quantity = j;
b.push_back(c);
for (i = 0; i < n; i++)
{
k = 0;
for (j = 0; j < b.size(); j++)
if (b[j].number == a[i])
{
k++;
break;
}
if (k) continue;
for (j = i; j < n; j++)
if (a[i] == a[j]) k++;
c.number = a[i];
c.quantity = k;
b.push_back(c);
}
for (i = 0; i < b.size(); i++)
if (b[i].quantity > l)
{
l = b[i].quantity;
k = i;
}
k = a[k];
for (i = 0; i < b.size(); i++)
if (b[i].quantity == l)
if (b[i].number < k) k = b[i].number;
cout << k << ' ' << l;
}
Похожие вопросы
- Помогите написать код
- Помогите написать код с файлами C++
- Помогите написать код с файлами C++
- Программирование на C++ .Помогите написать код.
- ПРОШУ, ПОМОГИТЕ НАПИСАТЬ КОД C++
- Помогите написать код решения уравнения, желательно на с++
- Помогите написать код (как можно примитивнее)
- Помогите написать код c++
- Помогите написать код на Си, по теме "строки".
- Помогите написать код C++