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

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

26.08.2011, 19:26. Показов 25966. Ответов 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
Закрытая тема Создать тему
Новые блоги и статьи
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров В текущей версии модели успешно реализован ключевой механизм. . .
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям Реализованные компоненты: Механизм закисления почвы через протонную помпу Конкуренция между типами микориз pH как триггер сукцессии C/ P соотношение. . .
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
Решил проблему с ошибкой пагинации сообщений с сервера на алгоритме обхода дерева "Эстафета хвоста".
Hrethgir 12.07.2026
Проблема была в том, что удалялась именно новая кнопка, а не старая. Ни один ИИ не обнаружил это, а сам я смог только когда с работой стало попроще и когда заставил работать будущее автономное. . .
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы ## О чём эта статья В процессе построения ОДУ-модели (система дифференциальных. . .
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет) Содержание проекта Симуляция вековой (50 лет) экологической сукцессии в почве леса Основные участники: АМ-гриб, ЭКМ-гриб,. . .
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru