Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.89/55: Рейтинг темы: голосов - 55, средняя оценка - 4.89
4 / 4 / 0
Регистрация: 02.02.2016
Сообщений: 122

Максимальное количество одинаковых элементов

09.12.2017, 00:44. Показов 10876. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задачка такая,что нужно определить максимальное количество одинаковых элементов.
Код работает,но я сомневаюсь в правильности идеи.Сравниваю два соседних элемента и увеличиваю счётчик на два, если элементы равны. Правильно ли мыслю или есть другой способ решить задачку?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
#include <time.h>
#include <cstdlib>
#include <iostream>
#include<locale>
using namespace std;
void fillArray(int arr[], int size, int rb, int lb)
{
    srand((unsigned int)time(0));
    for (int i = 0; i< size; i++)
    {
        arr[i] = (rb - lb)*((int)rand()) / RAND_MAX + lb;
    }
}
void printArray(int a[], int size)
{
    cout << "Mass : " << endl;
    for (int i = 0; i<size; i++)
    {
        cout << a[i] << ", ";
    }
    cout << endl;
}
int maxelem(int mas[], int nmas)
{
    
    int col = 0;
    int i, j;
    for (i = 0; i<nmas; i++)
    {
        for (j = i + 1; j<nmas; j++)
        {
            if (mas[i] == mas[j])
                col=col+2;
        }
    }
    return col;
    cout << endl;
}
int main()
{
    int *a,N;
    cout << "N = " ;
    cin >> N ;
    a = new int[N];
    int left = -10, right = 10;
    fillArray(a, N, left, right); //функция заполнения
    printArray(a, N); //функция печати
    int col = maxelem(a, N);
    cout << col;
    cout << endl;
    system("pause");
 
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2017, 00:44
Ответы с готовыми решениями:

Определить максимальное количество одинаковых элементов массива
Дано целочисленный массив размера N. Определить максимальное количество его одинаковых элементов. Обязательно использовать функцию и...

Определить максимальное количество одинаковых элементов массива
Доброго времени суток. Нужна помощь по задаче. Никак не могу понять, в чём же проблема. &quot;Дан целочисленный массив размера N....

Найти максимальное количество одинаковых элементов массива
Задание: Максимальное количество одинаковых элементов Дан массив размера N. Найдите максимальное количество одинаковых элементов этого...

8
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
09.12.2017, 07:46
Количество элементов повторяющихся чаще всего?
0
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
09.12.2017, 08:04
Lorentinka,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <map>
 
int main(int argc, char* argv[] )
{
    int a[] = {1, 1, 1, 2, 2, 3, 3};
    std::map<int, size_t> map;
 
    for (auto& r : a) map[r]++;
 
    size_t max = 0;
    for (auto& r : map)
        if (r.second > max) max = r.second;
 
    return 0;
}
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
10.12.2017, 21:05
Lorentinka, здравствуйте! Вот еще вариант:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int N, k, max;
    cout << "Enter an array size:" << "\n";
    cout << "N = ";
    cin >> N;
    int* arr = new int[N];
    cout << "Enter an array:" << "\n";
    for (int i = 0; i < N; i++)
    {
        cin >> arr[i];
    }
    sort(arr, arr + N);
    k = max = 0;
    for (int i = 0; i < N - 1; i++)
    {
        if (arr[i+1] == arr[i])
            k++;
        else
            k = 0;
        if (k > max) max = k;
    }
    cout << "Searched quantity: " << ++max << "\n";
    delete [] arr;
    system("pause");
    return 0;
}
1
4 / 4 / 0
Регистрация: 02.02.2016
Сообщений: 122
10.12.2017, 21:15  [ТС]
Вот такой вопрос возникает на сколько нужно увеличить счётчик?В задачке сказано найти количество повторяющихся элементов, допустим есть массив 5,4,0,5,6,8,1,-5,-6. Нужно считать 5 два раза или один?
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
14.12.2017, 21:56
Цитата Сообщение от Lorentinka Посмотреть сообщение
Вот такой вопрос возникает на сколько нужно увеличить счётчик?В задачке сказано найти количество повторяющихся элементов, допустим есть массив 5,4,0,5,6,8,1,-5,-6. Нужно считать 5 два раза или один?
Здравствуйте! Повторяющихся, то есть тех, которые повторяются. Пятерка встречается два раза, значит и повторяется она два раза. Но я не уверен. Может быть, один. И так и так можно понять.
0
4 / 4 / 0
Регистрация: 02.02.2016
Сообщений: 122
17.12.2017, 19:47  [ТС]
Да,элемент у которого больше всего повторов.Ну вот мы сравниваем элементы в массиве,если они равны друг другу,то счётчик увеличиваем на единицу. Чтобы посчитать максимальное количество повторений заведём переменную max.А как в неё записать количество повторов ума не приложу.
Например,случайным образом получается такой массив: 3,4,3,2,3,3,4,4,3,1. В окончательном ответе должно быть 4.Так как только тройка повторяется 4 раза.
0
 Аватар для Fixer_84
1505 / 969 / 812
Регистрация: 30.04.2016
Сообщений: 3,337
17.12.2017, 20:43
Lorentinka, здравствуйте! Можно сначала отсортировать массив, а потом пробежать по нему. Для вашего случая отсортированным будет: 1 2 3 3 3 3 3 4 4 4

Вот код с комментариями:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <bits/stdc++.h>
 
using namespace std;
 
int main()
{
    int N, k, max;
    cout << "Enter an array size:" << "\n";
    cout << "N = ";
    cin >> N; //Вводим количество элементов массива
    int* arr = new int[N];
    cout << "Enter an array:" << "\n";
    for (int i = 0; i < N; i++)
    {
        cin >> arr[i]; //Вводим элементы массива
    }
    sort(arr, arr + N); //Сортируем массив
    k = max = 0;
    for (int i = 0; i < N - 1; i++) //Пробегаем по элементам массива
    {
        if (arr[i+1] == arr[i]) //Если элементы равны подсчитываем их количество
            k++;
        else
            k = 0; //Иначе обнуляем счетчик
        if (k > max) max = k; //Выбираем максимальное число повторов
    }
    cout << "Searched quantity: " << max << "\n"; //Выводим искомое значение
    delete [] arr;
    system("pause");
    return 0;
}
0
4 / 4 / 0
Регистрация: 02.02.2016
Сообщений: 122
17.12.2017, 21:18  [ТС]
Не работает так как надо.Я ещё думаю как отсортировать массив в моём варианте.Куда же впихнуть эту функцию сортировки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#include <time.h>
#include <cstdlib>
#include <iostream>
#include<locale>
using namespace std;
void fillArray(int arr[], int size, int rb, int lb)
{
    srand((unsigned int)time(0));
    for (int i = 0; i< size; i++)
    {
        arr[i] = (rb - lb)*((int)rand()) / RAND_MAX + lb;
    }
}
void printArray(int a[], int size)
{
    cout << "Mass : " << endl;
    for (int i = 0; i<size; i++)
    {
        cout << a[i] << ", ";
    }
    cout << endl;
}
int sortBubble1(int mas[], int nMas)
// Вход:
//   mas  - массив, который надо отсортировать по возрастанию
//   nMas - длина массива mas
// Результат - количество перестановок
{
    int tmp; // рабочая переменная для перестановки
    int repl = 0; // к-во пересановок
 
    for (int i = nMas - 1; i > 1; --i)
    {
        for (int j = 0; j < i; ++j)
        {
            if (mas[j] > mas[j + 1])
            {
                // Перестановка:
                tmp = mas[j];
                mas[j] = mas[j + 1];
                mas[j + 1] = tmp;
                repl++;
            }
        }
    }
 
    return repl;
}
 
int maxelem(int mas[], int nmas)
{
    
 
    int kol = 0;
    int max = 0;
    int i, j;
    for (i = 0; i<nmas-1; i++)
    {
        
            if (mas[i + 1] == mas[i]) //Если элементы равны подсчитываем их количество
                kol=kol+1;
            else
                kol = 0; //Иначе обнуляем счетчик
 
            if (kol > max)
                max = kol; //Выбираем максимальное число повторов
    }
    return max;
}
    
    
 
int main()
{
    int *a, N;
    cout << "N = ";
    cin >> N;
    a = new int[N];
    int left = 0, right = 4;
    fillArray(a, N, left, right); //функция заполнения
    printArray(a, N); //функция печати
    sortBubble1(a, N);//сортировка массива
    int col = maxelem(a, N);
    cout << col;
    cout << endl;
    system("pause");
 
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
17.12.2017, 21:18
Помогаю со студенческими работами здесь

Определить максимальное количество одинаковых элементов массива, использовать функцию и указатели
Помогите, пожалуйста, ОЧЕНЬ срочно нужно! Дано целочисленный массив размера N. Определить максимальное количество его одинаковых...

Найти в матрице первый столбец, содержащий максимальное количество одинаковых элементов
Дана целочисленная матрица размера M х N. Найти номер первого из ее столбцов, содержащих максимальное количество одинаковых элементов....

Найти номер последней из ее строк,содержащих максимальное количество одинаковых элементов.
Дана целочисленная матрица M x N. Найти номер последней из ее строк,содержащих максимальное количество одинаковых элементов. #include...

Подсчитать максимальное количество идущих подряд одинаковых элементов в одномерном массиве.
Доброго времени суток. Помогите пожалуйста решить задачу. Подсчитать максимальное количество идущих подряд одинаковых элементов в...

Найти номер последней из строк матрицы, содержащих максимальное количество одинаковых элементов
Дана целочисленная матрица размера M х N. Найти номер последней из ее строк, содержащих максимальное количество одинаковых элементов. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru