Другие языки программирования и технологии
Дан одномерный целочисленный массив a, состоящий из n элементов.
Найти максимальное количество его одинаковых элементов. Исходный массив и полученные результаты ( значение и количество одинаковых элементов массива) вывести на печать.
Проще всего сравнить каждый элемент со всем массивом
int maxCnt = 0;
int maxVal;
for( int i=0; i < n; i++) {
int cnt = 0;
for ( int j=0; j < n; j++) {
if( a[i] == a[j]) cnt++;
}
if (cnt > maxCnt) { maxCnt = cnt; maxVal = a[i]; }
}
printf( "value: %d, count: %d\n", maxVal, maxCnt);
int maxCnt = 0;
int maxVal;
for( int i=0; i < n; i++) {
int cnt = 0;
for ( int j=0; j < n; j++) {
if( a[i] == a[j]) cnt++;
}
if (cnt > maxCnt) { maxCnt = cnt; maxVal = a[i]; }
}
printf( "value: %d, count: %d\n", maxVal, maxCnt);
1. Сначала сортируем массив - хотя бы встроенной в C функцией qsort.
2. Потом просто считаем кол-во подряд идущих одинаковых элементов и ищем максимум:
cnt = 1;
max_val = a[0];
max_cnt = 1;
for (i = 1; i < n; ++i) {
if (a[i] == a[i-1]) {
++cnt;
} else {
cnt = 1;
}
if (cnt > max_cnt) {
max_cnt = cnt;
max_val = a[i];
}
}
2. Потом просто считаем кол-во подряд идущих одинаковых элементов и ищем максимум:
cnt = 1;
max_val = a[0];
max_cnt = 1;
for (i = 1; i < n; ++i) {
if (a[i] == a[i-1]) {
++cnt;
} else {
cnt = 1;
}
if (cnt > max_cnt) {
max_cnt = cnt;
max_val = a[i];
}
}
https://pastebin.com/3QPAjLvv
не полностью... сам интересовался этим вопросом
не полностью... сам интересовался этим вопросом
Пожалуйста.
M@il.Ответы зачастую съедает треугольные скобки < > и их содержимое. Я постарался это предотвратить, но на всякий случай, вот файл *.cpp с корректным кодом. Я его выложил на Яндекс. Диск https://yadi.sk/d/0auNMSFI3RU3MH
Если пользоваться массивом, а не шаблонным классом vector и не использовать словарик map - можно голову обломать при написании кода.
#include < iostream >
#include < vector >
#include < map >
#include < cstdlib >
#include < ctime >
#include < algorithm >
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
system("color 0A");
cout << "Введите количество элементов в контейнере ";
unsigned n;
cin >> n;
vector < int > v(n);
generate(v.begin(), v.end(), []() {return -10 + rand() % 21; });
cout << "Содержимое контейнера" << endl;
for (auto t : v) cout << t << " ";
cout << endl;
sort(v.begin(), v.end());
map < int, unsigned > mp;
int old;
unsigned sum = 0;
for(unsigned u = 0; u < v.size(); ++u)
{
if (u == 0)
{
old = v[u];
continue;
}
if (old == v[u])
{
++sum;
}
else
{
++sum;
mp.insert(pair < int, unsigned > (old, sum));
sum = 0;
}
if(u == v.size() - 1)
{
++sum;
mp.insert(pair < int, unsigned > (v[u], sum));
sum = 0;
}
old = v[u];
}
vector < pair < int, unsigned > > vec(mp.begin(), mp.end());
sort(vec.begin(), vec.end(), [](pair < int, unsigned > d1, pair < int, unsigned > d2) {return d1.second > d2.second; });
cout << "Максимальное количество одинаковых элементов в этом контейнере" << endl;
for (auto pp : vec)
{
if (pp.second == vec[0].second)
{
cout << "Элемент со значением " << pp.first << " встречается в контейнере " << pp.second << " раз (а)" << endl;
}
}
cin.get(); cin.get();
return 0;
}

M@il.Ответы зачастую съедает треугольные скобки < > и их содержимое. Я постарался это предотвратить, но на всякий случай, вот файл *.cpp с корректным кодом. Я его выложил на Яндекс. Диск https://yadi.sk/d/0auNMSFI3RU3MH
Если пользоваться массивом, а не шаблонным классом vector и не использовать словарик map - можно голову обломать при написании кода.
#include < iostream >
#include < vector >
#include < map >
#include < cstdlib >
#include < ctime >
#include < algorithm >
using namespace std;
int main()
{
setlocale(LC_ALL, "rus");
srand(time(NULL));
system("color 0A");
cout << "Введите количество элементов в контейнере ";
unsigned n;
cin >> n;
vector < int > v(n);
generate(v.begin(), v.end(), []() {return -10 + rand() % 21; });
cout << "Содержимое контейнера" << endl;
for (auto t : v) cout << t << " ";
cout << endl;
sort(v.begin(), v.end());
map < int, unsigned > mp;
int old;
unsigned sum = 0;
for(unsigned u = 0; u < v.size(); ++u)
{
if (u == 0)
{
old = v[u];
continue;
}
if (old == v[u])
{
++sum;
}
else
{
++sum;
mp.insert(pair < int, unsigned > (old, sum));
sum = 0;
}
if(u == v.size() - 1)
{
++sum;
mp.insert(pair < int, unsigned > (v[u], sum));
sum = 0;
}
old = v[u];
}
vector < pair < int, unsigned > > vec(mp.begin(), mp.end());
sort(vec.begin(), vec.end(), [](pair < int, unsigned > d1, pair < int, unsigned > d2) {return d1.second > d2.second; });
cout << "Максимальное количество одинаковых элементов в этом контейнере" << endl;
for (auto pp : vec)
{
if (pp.second == vec[0].second)
{
cout << "Элемент со значением " << pp.first << " встречается в контейнере " << pp.second << " раз (а)" << endl;
}
}
cin.get(); cin.get();
return 0;
}

Александр Попов
Если нужно в файл сохранить результат работы программы, то вот код https://yadi.sk/d/0auNMSFI3RU3MH перезалил на ту же ссылку.
В этом случае, код откомпилировать через F7, через студию не запускать.
Открыть *.exe файл, являющийся результатом компиляции кода.
Для этого слева или справа -> Обозреватель решений -> Решение "..." -> правая кнопка мышки -> Открыть папку в проводнике -> Debug (если компиляция F7 в режиме Debug была), иначе открыть папку Release -> Запустить *.exe -> После завершения работы программы можно открыть файл numeric.txt (в этой же папке с программой), там будут результаты работы программы.
В этом случае, код откомпилировать через F7, через студию не запускать.
Открыть *.exe файл, являющийся результатом компиляции кода.
Для этого слева или справа -> Обозреватель решений -> Решение "..." -> правая кнопка мышки -> Открыть папку в проводнике -> Debug (если компиляция F7 в режиме Debug была), иначе открыть папку Release -> Запустить *.exe -> После завершения работы программы можно открыть файл numeric.txt (в этой же папке с программой), там будут результаты работы программы.
Похожие вопросы
- Дан прямоугольный целочисленный массив размером N*N. Определить является ли данный массив магическим квадратом, т.е. сум
- С++.Дан одномерный числовой массив. Написать функции.
- Массив заполнен случайными величинами в диапазоне от -30 до 29 и состоит из N элементов. Подсчитать сколько в нём
- Заполнить случайным образом одномерный массив из n элементов и обменять местами последний и максимальный (в паскале)
- Microsoft Visual C++ 6.0 В одномерном массиве, состоящем из n вещественных элементов, вычислить...
- В одномерном массиве, состоящем из n вещественных элементов, вычис- лить: 39 1) сумму положительных элементов массив
- Составьте программу, отыскивающую наибольший элемент массива A(N) из числа принадлежащим интервалу {min,(min+max\2))
- Язык Си: В одномерном массиве, состоящем из n вещественных элементов, вычислить: номер максимального по модулю элемента
- Пусть задан целочисленный массив из 30 элементов.
- Даны два массива A и B размера N, элементы которых упорядочены по убыванию. Объединить эти массивы так, чтобы результ
Вот решение. Как я заметил, ты сейчас STL рассматриваешь? Как раз там полно инструментов из STL - контейнеры.
https://yadi.sk/d/0auNMSFI3RU3MH