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

Определить количество максимальных элементов в массиве.

26.08.2011, 19:26. Показов 25469. Ответов 88
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Дан одномерный массив. Определить количество максимальных элементов в массиве.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2011, 19:26
Ответы с готовыми решениями:

Вычислить количество максимальных элементов в массиве
Вычислить количество максимальных элементов в массиве Помогите пожалуйста

Определить индекс первого из максимальных элементов в массиве
Пожалуйста, решите те задачи которые можете: 1).Сортировка выбором предполагает использование трёх приёмов. Первый - нахождение...

Написать функцию, которая вычисляет количество максимальных элементов в массиве
#include <iostream> using namespace std; int main() { int n, max, k; cout << "Enter the dimension of the array:\n"; ...

88
Заблокирован
28.08.2011, 18:19
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от Петррр Посмотреть сообщение
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
int main(void)
{
    int a[50];
    int max = -1, maxCount = 0;
    int i;
    for(i = 0; i < 50; i++)
    {
        a[i] = rand() % 10;
        if (a[i] > max)
            max = a[i];
        printf("%d ", a[i]);
    }
    for(i = 0; i < 50; i++)
        if (a[i] == max)
            maxCount++;
    printf("\n\n%d", maxCount);
    getchar();
}
Ваш код некорректный, так как, например, нельзя исключать ситуацию, когда все элементы заданного массива будут менрьше -1, и тогда вы получите, что для любой подобной последовательности состоящей из отрицательных элементов максаимум всегда будет равен -1.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.08.2011, 18:21
Разве эта строка может сгенерировать число меньше -1.?
C
1
a[i] = rand() % 10;
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 18:29
Цитата Сообщение от Thinker Посмотреть сообщение
Давайте немного алгоритмически мыслить, а не все "в лоб"
Давайте. Ваша функция написана "в лоб", ибо она не универсальна. Предложенный мной вариант - алгоритмический, потому что при небольшом изменении условия уже написанный и отлаженный код не придётся менять.

Цитата Сообщение от Thinker Посмотреть сообщение
все системы рухнут от перегрева работы
И как же на это повлияет универсальность?

Цитата Сообщение от Thinker Посмотреть сообщение
Драйвера и многое другое так не пишут, вот в о чем речь.
"Драйвера и многое другое" - вещи специфические, а не прикладные, о коих говорим мы.
0
Заблокирован
28.08.2011, 18:36
Цитата Сообщение от Петррр Посмотреть сообщение
Разве эта строка может сгенерировать число меньше -1.?
C
1
a[i] = rand() % 10;

А причем здесь эта строка?! Вы показываете решение общей задачи нахождения количества максимальных элементов в последовательности. Так что ваша строка - это всего лишь ваш личный выбор способа заполнения массива, а у других людей может быть другой способ заполнения массива, например, через входной поток!
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.08.2011, 18:50
Сыроежка, Вы притворяетесь или реально тупите.? Запуститу мой код тысячу раз и посмотрите будет ли ответ неверный. Если Валентин выберет другой способ заполнения массива, то пусть и по другому ищет это самое количество.

Добавлено через 1 минуту
Я писал конкретно под свой вариант.
0
Заблокирован
28.08.2011, 19:19
Цитата Сообщение от Петррр Посмотреть сообщение
Сыроежка, Вы притворяетесь или реально тупите.? Запуститу мой код тысячу раз и посмотрите будет ли ответ неверный. Если Валентин выберет другой способ заполнения массива, то пусть и по другому ищет это самое количество.

Добавлено через 1 минуту
Я писал конкретно под свой вариант.
А зачем его запускать тысячу раз?! Достаточно запустить один раз, заполнив массив через входной поток, и, используя ваш алгоритм, получить неверный ответ.

Я еще раз повторяю, ваш алгоритм подсчета количества максимальных элементов некорректный" Можно даже сказать грубее: безграмотный. Это уже избитое место, что при решении подобных задач начальное значение максимума или минимума должно быть значение первого элемента. То есть вы демонстрируете неправильный подход к решению задачи. А задача была сформулирована четко: определить количество максимальных элементов. Вопрос о том, какой будет использоваться массив и с какими значениями элементов, как некоторое ограничение на алгоритм, не ставился.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.08.2011, 19:46
Это где ж написано что мин/макс должен быть первый элемент.? Покажите мне мнение авторитетных авторов, а не демонстрируйте своё, грамотное
0
Заблокирован
28.08.2011, 19:57
Цитата Сообщение от Петррр Посмотреть сообщение
Это где ж написано что мин/макс должен быть первый элемент.? Покажите мне мнение авторитетных авторов, а не демонстрируйте своё, грамотное
Не обязательно первый, может быть и последний, если контейнер вам позволяет и даже взятый из середины контейнера. Главное - чтобы это было значением элемента контейнера. Просто обычно опреации последовательного обхода контейнеров начинают с некоторого начального элемента То есть все алгоритмы используют диапазон, задаваемый начальный и конечный итераторами. Более того, если вы имеете дело с однонаправленным списком, проще и эффективнее брать именно первый элемент в качестве предполагаемого максимума. Вы вообще алгоритмы знаете?! Посмотрите, как устроен алгоритм std::max_element.

Вообще-то, это изучают на первых занятиях по программированию: как найти максимальный или минимальный элемент в последовательности. Могу вас уверить, что ваш алгоритм демонстрируют в качестве неправльного подхода, как не надо находить максимальный и минимальный элемент!

Я вообще не понимаю, чего вы добиваетесь, так как, как я уже сказал, ваш алгоритм некорректный, и я показал, почему он некорректный.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.08.2011, 20:01
Нет. Я не знаю как работают алгоритмы, а что? Я говорю, что алгоритм корректный, потому что я знаю, что в массиве не будет элемента меньше нуля.
0
Заблокирован
28.08.2011, 20:11
Цитата Сообщение от Петррр Посмотреть сообщение
Нет. Я не знаю как работают алгоритмы, а что? Я говорю, что алгоритм корректный, потому что я знаю, что в массиве не будет элемента меньше нуля.
Знаете, я не вижу смысла обсуждать далее с вами этот вопрос, так как все, что можно было сказать, я уже сказал, в том числе и то, что в вопросе темы ничего не говорилось об ограничениях на значения элементов массива, а требовалось представить алгоритм, который для произвольного массива подсчитывает число максимальных элементов. Никого не интересовало, как вы будете воодить данные в массив. Не это было предметом темы.
Но даже если гипотетически предположить, что были какие-то ограничения на значения элементов массива, ваш подкход к решению щадачи все равно остается некорректным и бесполезным, так как кроме одного единичного частного случая его использовать нельзя. То есть даже речи никакой не идет о переносимости вашего алгоритма нахождения максимального элемента в последовательноти.

Повторяю в последний раз, так как, как я вижу, можно вам и десять раз повторять, но вы все равно не поймете, что ваш алгоритм нахождения количества максимальных элементов безграмотен! Вы даже не в состоянии понять, что ввод данных никакого отношения к самому алгоритму не имеет.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:14
Цитата Сообщение от Сыроежка Посмотреть сообщение
при решении подобных задач начальное значение максимума или минимума должно быть значение первого элемента.
Почему? Что, например, мешает при поиске минимального элемента взять максимально возможное значение для заданного типа?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
28.08.2011, 20:14
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
#include <algorithm>
#include <vector>
#include <iostream>
 
template<typename T> struct Comp
{
   Comp() : count(0) {}
   void operator() (const T& t) 
   {
      if (t > max || 0 == count){ max = t; count = 1; }
      else if (t==max) ++count;
   }   
   
   int count;
   T max; 
};
 
int main()
{ 
   std::vector<int> v = {-10,3,23,2,3,-34,12,23};
   Comp<int> comp = std::for_each( v.begin(), v.end(), Comp<int>() );
   if (comp.count)
   {
     std::cout << comp.max << ", count - " << comp.count << std::endl;
   }    
}
не уверен, что с производительностью будет
0
Заблокирован
28.08.2011, 20:19
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Почему? Что, например, мешает при поиске минимального элемента взять максимально возможное значение для заданного типа?
Мешает то, что последовательность может быть пустой, и тогда для пустой последовательности вы вернете значение максимума.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:20
Петррр, Сыроежка прав относительно того, что начальное значение максимума не должно быть -1 и то как заполняется массив, никак этого положения не меняет.

Цитата Сообщение от Сыроежка Посмотреть сообщение
Мешает то, что последовательность может быть пустой, и тогда для пустой последовательности вы вернете значение максимума.
Ок, и что мы поимеем после строки max = sequence[0], если последовательность пуста?
2
Заблокирован
28.08.2011, 20:24
Цитата Сообщение от alex_x_x Посмотреть сообщение
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
#include <algorithm>
#include <vector>
#include <iostream>
 
template<typename T> struct Comp
{
   Comp() : count(0) {}
   void operator() (const T& t) 
   {
      if (t > max || 0 == count){ max = t; count = 1; }
      else if (t==max) ++count;
   }   
   
   int count;
   T max; 
};
 
int main()
{ 
   std::vector<int> v = {-10,3,23,2,3,-34,12,23};
   Comp<int> comp = std::for_each( v.begin(), v.end(), Comp<int>() );
   if (comp.count)
   {
     std::cout << comp.max << ", count - " << comp.count << std::endl;
   }    
}
не уверен, что с производительностью будет
До производительнсоти еще далеко! Ваш алгоритм содержит серьезную ошибку. Попробуйте ее найти сами. В теме "одноразмерный массив" я уже привел корректное профессиональное решение этой задачи.

Добавлено через 2 минуты
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Петррр, Сыроежка прав относительно того, что начальное значение максимума не должно быть -1 и то как заполняется массив, никак этого положения не меняет.


Ок, и что мы поимеем после строки max = sequence[0], если последовательность пуста?
А дело в том, что это выполняют лишь в том случае, если последовательность не пуста. Посмотрите реализацию алгоритма std::max_element
0
Эксперт С++
 Аватар для fasked
5045 / 2624 / 241
Регистрация: 07.10.2009
Сообщений: 4,310
Записей в блоге: 5
28.08.2011, 20:27
Цитата Сообщение от Сыроежка Посмотреть сообщение
А дело в том, что это выполняют лишь в том случае, если последовательность не пуста. Посмотрите реализацию алгоритма std::max_element
Что-то мешает выполнять алгоритм с максимальный значением для типа только в том случае, если последовательность не пуста?
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
28.08.2011, 20:28
Лучший ответ Сообщение было отмечено как решение

Решение

Цитата Сообщение от Сыроежка Посмотреть сообщение
Попробуйте ее найти сами. В теме "одноразмерный массив" я уже привел корректное профессиональное решение этой задачи.
не пробовали использовать меньше пафоса?
3
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:31
Цитата Сообщение от Сыроежка Посмотреть сообщение
Посмотрите реализацию алгоритма std::max_element
Вы ее видели? Посмотрите внимательно, она возвращает итератор, а в случае пустой последовательности итератор указывающий на элемент следующий за последним, т.е. этот алгоритм будет работать для пустых последовательностей, достаточно лишь проверить, что возвращаемое значение не указывает на элемент следующий за последним. Ваше же "профессионально решение" в случае пустой последовательности вернет мусор, которым будет инициализировано поле count.
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.08.2011, 20:31
Ок. Я расскажу великую тайну всех времен и народов. Я взял макс -1, потому что в массиве не может быть отрицательных элементов. Да. Пусть это будет не правильно. Но сделал я так, что бы избежать двух циклов вместо одного. Потому что пришлось бы сначала заполнить массив, а потом искать максимум. А так массив заполняется и в том же цикле ищется максимальный элемент.
0
Заблокирован
28.08.2011, 20:33
Цитата Сообщение от fasked Посмотреть сообщение
Что-то мешает выполнять алгоритм с максимальный значением для типа только в том случае, если последовательность не пуста?

Проблема в том, что когда вы имеете дело с объектами, то может вообще не быть некоего эталонного максимального значения для объектов. То есть оператор < может быть так определен, что он вообще не будет иметь дело с каким-то одним встроенным типом. Возьмите для примера объекты типа
C++
1
std::pair
.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.08.2011, 20:33
Помогаю со студенческими работами здесь

В чем ошибка? В массиве целых чисел найти количество максимальных элементов
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;time.h&gt; #define N 16 #define A 0 #define B 5 void Init(int *a, int n) { ...

Определить количество максимальных элементов в массиве
Постановка задачи: Дан двумерный массив. Определить: а) Количество максимальных элементов в массиве б) Количество минимальных элементов...

Определить количество максимальных элементов в массиве
Дан двумерный массив. Определить: а) количество макс. элементов в массиве б) количество мин. элементов в массиве Для определения...

Определить количество максимальных элементов в массиве
Добрый день. Собственно, задание: Запрашивать размерность двумерного массива. Затем организовать заполнение двумерного массива целыми...

Определить количество максимальных элементов в массиве
Щас через минуты 2 будет к\р, поможете?))) Я буду выкладывать задачи! :drink: Добавлено через 4 минуты 44 секунды Первая: В массиве...


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

Или воспользуйтесь поиском по форуму:
40
Закрытая тема Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru