Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 60, средняя оценка - 4.75
валентин777
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 45
26.08.2011, 19:26     Определить количество максимальных элементов в массиве. #1
Дан одномерный массив. Определить количество максимальных элементов в массиве.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2011, 19:26     Определить количество максимальных элементов в массиве.
Посмотрите здесь:

C++ В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов.
В массиве A из N элементов (N не больше 30) определить количество элементов... C++
В массиве А(n) (n<=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю. C++
C++ В массиве X определить количество элементов
Определить количество интересных элементов в массиве C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
28.08.2011, 18:19     Определить количество максимальных элементов в массиве. #21
Цитата Сообщение от Петррр Посмотреть сообщение
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.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 18:21     Определить количество максимальных элементов в массиве. #22
Разве эта строка может сгенерировать число меньше -1.?
C
1
a[i] = rand() % 10;
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
28.08.2011, 18:29     Определить количество максимальных элементов в массиве. #23
Цитата Сообщение от Thinker Посмотреть сообщение
Давайте немного алгоритмически мыслить, а не все "в лоб"
Давайте. Ваша функция написана "в лоб", ибо она не универсальна. Предложенный мной вариант - алгоритмический, потому что при небольшом изменении условия уже написанный и отлаженный код не придётся менять.

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

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

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

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

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

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

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

Я вообще не понимаю, чего вы добиваетесь, так как, как я уже сказал, ваш алгоритм некорректный, и я показал, почему он некорректный.
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 20:01     Определить количество максимальных элементов в массиве. #29
Нет. Я не знаю как работают алгоритмы, а что? Я говорю, что алгоритм корректный, потому что я знаю, что в массиве не будет элемента меньше нуля.
Сыроежка
Заблокирован
28.08.2011, 20:11     Определить количество максимальных элементов в массиве. #30
Цитата Сообщение от Петррр Посмотреть сообщение
Нет. Я не знаю как работают алгоритмы, а что? Я говорю, что алгоритм корректный, потому что я знаю, что в массиве не будет элемента меньше нуля.
Знаете, я не вижу смысла обсуждать далее с вами этот вопрос, так как все, что можно было сказать, я уже сказал, в том числе и то, что в вопросе темы ничего не говорилось об ограничениях на значения элементов массива, а требовалось представить алгоритм, который для произвольного массива подсчитывает число максимальных элементов. Никого не интересовало, как вы будете воодить данные в массив. Не это было предметом темы.
Но даже если гипотетически предположить, что были какие-то ограничения на значения элементов массива, ваш подкход к решению щадачи все равно остается некорректным и бесполезным, так как кроме одного единичного частного случая его использовать нельзя. То есть даже речи никакой не идет о переносимости вашего алгоритма нахождения максимального элемента в последовательноти.

Повторяю в последний раз, так как, как я вижу, можно вам и десять раз повторять, но вы все равно не поймете, что ваш алгоритм нахождения количества максимальных элементов безграмотен! Вы даже не в состоянии понять, что ввод данных никакого отношения к самому алгоритму не имеет.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:14     Определить количество максимальных элементов в массиве. #31
Цитата Сообщение от Сыроежка Посмотреть сообщение
при решении подобных задач начальное значение максимума или минимума должно быть значение первого элемента.
Почему? Что, например, мешает при поиске минимального элемента взять максимально возможное значение для заданного типа?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.08.2011, 20:14     Определить количество максимальных элементов в массиве. #32
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;
   }    
}
не уверен, что с производительностью будет
Сыроежка
Заблокирован
28.08.2011, 20:19     Определить количество максимальных элементов в массиве. #33
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Почему? Что, например, мешает при поиске минимального элемента взять максимально возможное значение для заданного типа?
Мешает то, что последовательность может быть пустой, и тогда для пустой последовательности вы вернете значение максимума.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:20     Определить количество максимальных элементов в массиве. #34
Петррр, Сыроежка прав относительно того, что начальное значение максимума не должно быть -1 и то как заполняется массив, никак этого положения не меняет.

Цитата Сообщение от Сыроежка Посмотреть сообщение
Мешает то, что последовательность может быть пустой, и тогда для пустой последовательности вы вернете значение максимума.
Ок, и что мы поимеем после строки max = sequence[0], если последовательность пуста?
Сыроежка
Заблокирован
28.08.2011, 20:24     Определить количество максимальных элементов в массиве. #35
Цитата Сообщение от 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
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
28.08.2011, 20:27     Определить количество максимальных элементов в массиве. #36
Цитата Сообщение от Сыроежка Посмотреть сообщение
А дело в том, что это выполняют лишь в том случае, если последовательность не пуста. Посмотрите реализацию алгоритма std::max_element
Что-то мешает выполнять алгоритм с максимальный значением для типа только в том случае, если последовательность не пуста?
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
28.08.2011, 20:28     Определить количество максимальных элементов в массиве. #37
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Сыроежка Посмотреть сообщение
Попробуйте ее найти сами. В теме "одноразмерный массив" я уже привел корректное профессиональное решение этой задачи.
не пробовали использовать меньше пафоса?
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:31     Определить количество максимальных элементов в массиве. #38
Цитата Сообщение от Сыроежка Посмотреть сообщение
Посмотрите реализацию алгоритма std::max_element
Вы ее видели? Посмотрите внимательно, она возвращает итератор, а в случае пустой последовательности итератор указывающий на элемент следующий за последним, т.е. этот алгоритм будет работать для пустых последовательностей, достаточно лишь проверить, что возвращаемое значение не указывает на элемент следующий за последним. Ваше же "профессионально решение" в случае пустой последовательности вернет мусор, которым будет инициализировано поле count.
Петррр
 Аватар для Петррр
5915 / 3352 / 333
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 20:31     Определить количество максимальных элементов в массиве. #39
Ок. Я расскажу великую тайну всех времен и народов. Я взял макс -1, потому что в массиве не может быть отрицательных элементов. Да. Пусть это будет не правильно. Но сделал я так, что бы избежать двух циклов вместо одного. Потому что пришлось бы сначала заполнить массив, а потом искать максимум. А так массив заполняется и в том же цикле ищется максимальный элемент.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2011, 20:33     Определить количество максимальных элементов в массиве.
Еще ссылки по теме:

C++ В матрице случайных числе определить количество положительных, отрицательных, нулевых и максимальных элементов
C++ Определить количество элементов в массиве структур
C++ В чем ошибка? В массиве целых чисел найти количество максимальных элементов

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

Или воспользуйтесь поиском по форуму:
Сыроежка
Заблокирован
28.08.2011, 20:33     Определить количество максимальных элементов в массиве. #40
Цитата Сообщение от fasked Посмотреть сообщение
Что-то мешает выполнять алгоритм с максимальный значением для типа только в том случае, если последовательность не пуста?

Проблема в том, что когда вы имеете дело с объектами, то может вообще не быть некоего эталонного максимального значения для объектов. То есть оператор < может быть так определен, что он вообще не будет иметь дело с каким-то одним встроенным типом. Возьмите для примера объекты типа
C++
1
std::pair
.
Yandex
Объявления
28.08.2011, 20:33     Определить количество максимальных элементов в массиве.
Закрытая тема Создать тему
Опции темы

Текущее время: 11:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru