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

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

26.08.2011, 19:26. Показов 25545. Ответов 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
Закрытая тема Создать тему
Новые блоги и статьи
Уведомление о неверно выбранном значении справочника
Maks 06.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "НарядПутевка", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если в документе выбран неверный склад. . .
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru