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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 60, средняя оценка - 4.75
валентин777
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 45
#1

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

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

Дан одномерный массив. Определить количество максимальных элементов в массиве.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.08.2011, 19:26
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Определить количество максимальных элементов в массиве. (C++):

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

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

В матрице случайных числе определить количество положительных, отрицательных, нулевых и максимальных элементов - C++
1. В матрице размерами N*M определить количество положительных, отрицательных элементов и нулей (N и M не больше 10) и максимальный...

В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов. - C++
1. В массиве A из N элементов (N не больше 30) определить количество элементов, имеющих четные значения, и сумму этих элементов. Число N и...

В массиве А(n) (n<=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю. - C++
В массиве А(n) (n&lt;=7) хотя бы один нуль. Определить количество положительных и количество отрицательных элементов к первому нулю.

В массиве из 50 элементов определить количество элементов, кратных 6 и найти минимальный элемент - C++
В массиве из 50 элементов определить количество элементов, кратных 6 и найти минимальный элемент. Помогите, кто сможет. Нужно в C++

88
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:14 #31
Цитата Сообщение от Сыроежка Посмотреть сообщение
при решении подобных задач начальное значение максимума или минимума должно быть значение первого элемента.
Почему? Что, например, мешает при поиске минимального элемента взять максимально возможное значение для заданного типа?
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
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;
   }    
}
не уверен, что с производительностью будет
0
Сыроежка
Заблокирован
28.08.2011, 20:19 #33
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Почему? Что, например, мешает при поиске минимального элемента взять максимально возможное значение для заданного типа?
Мешает то, что последовательность может быть пустой, и тогда для пустой последовательности вы вернете значение максимума.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:20 #34
Петррр, Сыроежка прав относительно того, что начальное значение максимума не должно быть -1 и то как заполняется массив, никак этого положения не меняет.

Цитата Сообщение от Сыроежка Посмотреть сообщение
Мешает то, что последовательность может быть пустой, и тогда для пустой последовательности вы вернете значение максимума.
Ок, и что мы поимеем после строки max = sequence[0], если последовательность пуста?
2
Сыроежка
Заблокирован
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
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
28.08.2011, 20:27 #36
Цитата Сообщение от Сыроежка Посмотреть сообщение
А дело в том, что это выполняют лишь в том случае, если последовательность не пуста. Посмотрите реализацию алгоритма std::max_element
Что-то мешает выполнять алгоритм с максимальный значением для типа только в том случае, если последовательность не пуста?
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
28.08.2011, 20:28 #37
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Сыроежка Посмотреть сообщение
Попробуйте ее найти сами. В теме "одноразмерный массив" я уже привел корректное профессиональное решение этой задачи.
не пробовали использовать меньше пафоса?
3
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:31 #38
Цитата Сообщение от Сыроежка Посмотреть сообщение
Посмотрите реализацию алгоритма std::max_element
Вы ее видели? Посмотрите внимательно, она возвращает итератор, а в случае пустой последовательности итератор указывающий на элемент следующий за последним, т.е. этот алгоритм будет работать для пустых последовательностей, достаточно лишь проверить, что возвращаемое значение не указывает на элемент следующий за последним. Ваше же "профессионально решение" в случае пустой последовательности вернет мусор, которым будет инициализировано поле count.
0
Петррр
5962 / 3399 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 20:31 #39
Ок. Я расскажу великую тайну всех времен и народов. Я взял макс -1, потому что в массиве не может быть отрицательных элементов. Да. Пусть это будет не правильно. Но сделал я так, что бы избежать двух циклов вместо одного. Потому что пришлось бы сначала заполнить массив, а потом искать максимум. А так массив заполняется и в том же цикле ищется максимальный элемент.
0
Сыроежка
Заблокирован
28.08.2011, 20:33 #40
Цитата Сообщение от fasked Посмотреть сообщение
Что-то мешает выполнять алгоритм с максимальный значением для типа только в том случае, если последовательность не пуста?

Проблема в том, что когда вы имеете дело с объектами, то может вообще не быть некоего эталонного максимального значения для объектов. То есть оператор < может быть так определен, что он вообще не будет иметь дело с каким-то одним встроенным типом. Возьмите для примера объекты типа
C++
1
std::pair
.
0
CyBOSSeR
Эксперт С++
2303 / 1673 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:35 #41
Петррр, можно было просто за максимум взять -INT_MAX (INT_MAX лежит в limits.h) и было бы счастье .
0
Петррр
5962 / 3399 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 20:37 #42
CyBOSSeR, спасибо. Где ж ты раньше был.? Сейчас глуну.
0
Сыроежка
Заблокирован
28.08.2011, 20:37 #43
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вы ее видели? Посмотрите внимательно, она возвращает итератор, а в случае пустой последовательности итератор указывающий на элемент следующий за последним, т.е. этот алгоритм будет работать для пустых последовательностей, достаточно лишь проверить, что возвращаемое значение не указывает на элемент следующий за последним. Ваше же "профессионально решение" в случае пустой последовательности вернет мусор, которым будет инициализировано поле count.
Почему же он вернет мусор?! Посмотрите внимательно! Алгоритму std::for_each (если вы смотрите именно то мле решение, что я имею в виду), передается функционал, конструктор которого инициализирует счетчик равным 0.

Так о каком мусоре вы говорите?!
0
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
28.08.2011, 20:39 #44
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
0
Сыроежка
Заблокирован
28.08.2011, 20:40 #45
Цитата Сообщение от alex_x_x Посмотреть сообщение
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
Отвечаю: вы не инициализировали T max, а потому в нем может быть любое начальное значение.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2011, 20:40
Привет! Вот еще темы с ответами:

В массиве X определить количество элементов - C++
В массиве X определить количество элементов меньших среднего ариф*метического значения. Не упорядочивая массив удалить из него элемен*ты,...

В массиве A из N элементов (N не больше 30) определить количество элементов... - C++
1. В массиве A из N элементов (N не больше 30) определить количество элементов, значения которых больше среднего арифметического всех...

Определить количество элементов в массиве структур - C++
Помогите пожалуйста! Программка работает но по новому условию надо вместо &quot; введите количество продавцов&quot; чтобы я не знала заранее...

Определить количество положительных элементов в массиве - C++
Написать функцию, определяющую количество положительных элементов в массиве. Написать программу, проверяющую работу этой функции. Массив...


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

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
28.08.2011, 20:40
Закрытая тема Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru