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

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

26.08.2011, 19:26. Показов 26086. Ответов 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
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:35
Студворк — интернет-сервис помощи студентам
Петррр, можно было просто за максимум взять -INT_MAX (INT_MAX лежит в limits.h) и было бы счастье .
0
 Аватар для Петррр
6721 / 3570 / 900
Регистрация: 28.10.2010
Сообщений: 5,937
28.08.2011, 20:37
CyBOSSeR, спасибо. Где ж ты раньше был.? Сейчас глуну.
0
Заблокирован
28.08.2011, 20:37
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Вы ее видели? Посмотрите внимательно, она возвращает итератор, а в случае пустой последовательности итератор указывающий на элемент следующий за последним, т.е. этот алгоритм будет работать для пустых последовательностей, достаточно лишь проверить, что возвращаемое значение не указывает на элемент следующий за последним. Ваше же "профессионально решение" в случае пустой последовательности вернет мусор, которым будет инициализировано поле count.
Почему же он вернет мусор?! Посмотрите внимательно! Алгоритму std::for_each (если вы смотрите именно то мле решение, что я имею в виду), передается функционал, конструктор которого инициализирует счетчик равным 0.

Так о каком мусоре вы говорите?!
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
28.08.2011, 20:39
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
0
Заблокирован
28.08.2011, 20:40
Цитата Сообщение от alex_x_x Посмотреть сообщение
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
Отвечаю: вы не инициализировали T max, а потому в нем может быть любое начальное значение.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:42
Сыроежка, не увидел инициализацию поля count в конструкторе . Но тогда возникает вопрос, зачем нужно тогда нужно поле initialized? Что мешает сделать так:
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
template <typename T>
 
class MaxCount : public std::unary_function<T, void>
{
public:
   MaxCount() : count( 0 ) {}
   void operator ()( const T &x )
   {
      if ( count == 0 )
      {
         max = x;
         count = 1;
      }
      else if ( max == x )
      {
         ++count;
      }
      else if ( max < x )
      {
         max   = x;
         count = 1;
      }
   }
 
public:
   size_t count;
 
private:
   T max;
};
1
28.08.2011, 20:44

Не по теме:

за меня ответили:)

0
Заблокирован
28.08.2011, 20:45
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Сыроежка, не увидел инициализацию поля count в конструкторе . Но тогда возникает вопрос, зачем нужно тогда нужно поле initialized? Что мешает сделать так:
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
template <typename T>
 
class MaxCount : public std::unary_function<T, void>
{
public:
   MaxCount() : count( 0 ) {}
   void operator ()( const T &x )
   {
      if ( count == 0 )
      {
         max = x;
         count = 1;
      }
      else if ( max == x )
      {
         ++count;
      }
      else if ( max < x )
      {
         max   = x;
         count = 1;
      }
   }
 
public:
   size_t count;
 
private:
   T max;
};
Я думаю, вы допустили ошибку. У вас не увеличивается счетчик при первой итерации алгоритма. Вы, вижу, исправили эту ошибку.

Да, можно сделать и так. Но это нисколько не умаляет достоинства моего алгоритма.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 20:47
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я думаю, вы допустили ошибку. У вас не увеличивается счетчик при первой итерации алгоритма.
Сначала запостил, потом поправил, посмотрите, в вашей цитате уже поправленный вариант.
0
Заблокирован
28.08.2011, 20:57
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Сначала запостил, потом поправил, посмотрите, в вашей цитате уже поправленный вариант.
Да, уже поправленный. Но как я уже сказал, это нисколько не умаляет достоинств алгоритма. К тому же если вы внимательно почитаете то мое сообщение с алгоритмом, я написал его "на коленках", то есть код не набирался в компиляторе.

Добавлено через 7 минут
Цитата Сообщение от alex_x_x Посмотреть сообщение
Сыроежка, чем ваше профессиональное решение правильней моего, ну кроме того, что у вас испсользуется лишняя переменная
На самом деле отличий много! Мой код профессиональный, ваг - нет. Почему? Вы не адаптировали свой функционал, то есть в нем не определены соответсвующие typedef. Вы счетчик объявили как int, в то время, как например, у класса std::string size_type Объявлен как size_t. И, в третьих, как говорится, хорошо ложка к обеду. Ваш алгоритм уже совершенно не актуален после появления моего алгоритма. Если бы вы первым представили свой алгоритм,то тогда он бы мог быть актуальным.
0
Эксперт С++
 Аватар для CyBOSSeR
2348 / 1721 / 149
Регистрация: 06.03.2009
Сообщений: 3,675
28.08.2011, 21:27
Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы не адаптировали свой функционал, то есть в нем не определены соответсвующие typedef.
Зачем здесь typedef?
Цитата Сообщение от Сыроежка Посмотреть сообщение
И, в третьих, как говорится, хорошо ложка к обеду. Ваш алгоритм уже совершенно не актуален после появления моего алгоритма. Если бы вы первым представили свой алгоритм,то тогда он бы мог быть актуальным.
По-моему, в этой теме первым появилось решение alex_x_x'а. Да и ничего сверхестественного в Вашем решении нет, я когда увидел эту тему сразу подумал о решении схожим с решением alex_x_x'а, так что ничего оригинального в Вашем подходе нет, чтобы так им кичиться.
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:11
Цитата Сообщение от silent_1991 Посмотреть сообщение
Давайте. Ваша функция написана "в лоб", ибо она не универсальна. Предложенный мной вариант - алгоритмический....
Не буду разрывать муравейник в этой теме, а то споры те еще шли. Во-первых, моя функция применима в С++ и С (а человеку именно это и надо было). А во-вторых, название "в лоб" к ней не применимо, так как она для С.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 23:14
Цитата Сообщение от Thinker Посмотреть сообщение
А во-вторых, название "в лоб" к ней не применимо, так как она для С
Не вижу связи.

Добавлено через 1 минуту
Цитата Сообщение от Thinker Посмотреть сообщение
а человеку именно это и надо было
Человек, по-моему, и сам не знает, чего ему надо. То ему в С++ надо, то в С...
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:17
Цитата Сообщение от silent_1991 Посмотреть сообщение
Не вижу связи.
Ну, ваш аргумент про универсальность я понял. Но зачем здесь надо было писать отдельные функции поиска максимума, отдельно подсчета количества элементов с тем или иным значением и т.д. Это конкретный пример с одним проходом и все. А про С это то, что у вас уже чисто С++ вариант.

Добавлено через 1 минуту
Цитата Сообщение от silent_1991 Посмотреть сообщение
Человек, по-моему, и сам не знает, чего ему надо. То ему в С++ надо, то в С...
Это уже вспоминать смешно, странные просьбы были у него.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 23:20
Цитата Сообщение от Thinker Посмотреть сообщение
Но зачем здесь надо было писать отдельные функции поиска максимума, отдельно подсчета количества элементов с тем или иным значением и т.д.
Задача учебная, это понятно. Но всё же в своё время появилась парадигма структурного программирования. Она заключалась в том, чтобы разбивать код на подпрограммы, которые и взаимодействовали между собой. Так зачем же отметать эту парадигму и снова писать весь функционал в одном месте?

Цитата Сообщение от Thinker Посмотреть сообщение
А про С это то, что у вас уже число С++ вариант
Я это понимаю, но смысл-то один. В одну функцию передаётся результат выполнения другой. Разница в том, что я использовал готовые функции, а можно было изобрести велосипед и написать свои (задача-то учебная, простительно).

Добавлено через 41 секунду
Цитата Сообщение от Thinker Посмотреть сообщение
странные просьбы были у него
А я о чём
0
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:24
Цитата Сообщение от silent_1991 Посмотреть сообщение
Задача учебная, это понятно. Но всё же в своё время появилась парадигма структурного программирования. Она заключалась в том, чтобы разбивать код на подпрограммы, которые и взаимодействовали между собой. Так зачем же отметать эту парадигму и снова писать весь функционал в одном месте?
Я с вами не спорю. Понимаете, студентам полезно рассматривать задачи с разных сторон. Ведь все эти парадигмы не подходят для олимпиадных, например задач. Поэтому надо хотя бы понимать, что бывают и другие подходы.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 23:28
Thinker, это-то всё тоже понятно, но, к сожалению, такому "студенту", как ТС, нужно одно - отметка о сдаче лабы. Поэтому такие задачи мы пишем не для них, а больше для себя (выдалась свободная минутка - написал пару-тройку таких лаб, для души). А для себя надо писать правильно.
2
Эксперт С++
 Аватар для Thinker
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 23:32
Цитата Сообщение от silent_1991 Посмотреть сообщение
А для себя надо писать правильно.
Все от задачи зависит. Где очень нужна скорость, то приходится не то еще придумывать.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
28.08.2011, 23:36
Thinker, где очень нужна скорость, там вообще ассемблерные вставки используют. Но сомневаюсь, что это в данном случае уместно. Так что в данном лучше красиво и элегантно, чем быстро.
А вообще, преждевременная оптимизация - корень всех бед (с)
0
бжни
 Аватар для alex_x_x
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162
29.08.2011, 00:15
silent_1991, все относительно и универсальность тоже
есть ситуации когда нельзя сделать повторный обход, самый простой вариант - работа с потоком

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
#include <algorithm>
#include <iostream>
#include <iterator>
#include <sstream>
 
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::stringstream str("-10 3 23 2 3 -34 12 23"); 
   Comp<int> comp = std::for_each( std::istream_iterator<int>(str),
                                   std::istream_iterator<int>(),
                                   Comp<int>() );
   if (comp.count)
   {
     std::cout << comp.max << ", count - " << comp.count << std::endl;
   }    
}
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.08.2011, 00:15

В чем ошибка? В массиве целых чисел найти количество максимальных элементов
#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 секунды Первая: В массиве...


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

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Новые блоги и статьи
Кредитный калькулятор
Maks 05.08.2026
Решение задачи по прикладной информатике средствами 1С. Задача: Напишите приложение-калькулятор, которое помогает рассчитывать параметры кредита для аннуитетного и дифференцированного видов. . .
У нас сейчас поговорку "Опять 25" нужно переделать на "Опять +35".
kumehtar 04.08.2026
С ностальгией вспоминаю времена моего детства, когда у нас и правда +25 - была максимальная температура летом. Раньше +25 °C реально казались вершиной жары, когда можно было весь день пропадать на. . .
Как ИИ начал спорить и врать (возможно почуяв опасность для себя от индустрии - уход от электроники).
Hrethgir 04.08.2026
Недельный диалог, на фоне событий с НПЗ. Да, из спирта можно получать бензин, и это не сложно. Но потом в схеме я решил избавиться от насоса, при этом полностью сделав контроль подачи спирта в. . .
Термопринтер QR701
Argus19 03.08.2026
Термопринтер QR701 Купил два термопринтера QR701. На сэлф-тесте написано: Language: PC936 (GB18030). Что означает, что принтеры могут печатать только латиницу и китайские иероглифы. Так же. . .
Создание формы заимствованного документа
Maks 03.08.2026
Задача: Необходимо создать собственную форму заимствованного документа. На форме должен быть реквизит "Покупатель", а также табличная часть со следующими реквизитами: - Расчетный счет покупателя. . .
Задача предоставления скидок покупателям
Maks 03.08.2026
Задача: В документе "Продажи" необходимо реализовать функционал предоставления скидок покупателям. Скидка должна автоматически рассчитываться и подставляться в соответствующее поле при выборе. . .
Почему SEO не начинается с ключевых слов: что проверить до написания текстов
Neotwalker 01.08.2026
Когда владельцу сайта предлагают заняться SEO, первым шагом часто становится сбор запросов и написание текстов. Логика кажется понятной: 1. Находим ключевые слова. 2. Добавляем их на. . .
Знание — сила: Доктрина интенциональности знаний, углубление в формулу
Hrethgir 01.08.2026
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11957&stc=1&d=1785567302 Знаменитый афоризм Фрэнсиса Бэкона «Знание — сила» (Scientia potentia est) в массовой культуре принято понимать. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru