Форум программистов, компьютерный форум 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++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
29.08.2011, 18:33     Определить количество максимальных элементов в массиве. #61
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Зачем здесь typedef?

По-моему, в этой теме первым появилось решение alex_x_x'а. Да и ничего сверхестественного в Вашем решении нет, я когда увидел эту тему сразу подумал о решении схожим с решением alex_x_x'а, так что ничего оригинального в Вашем подходе нет, чтобы так им кичиться.
А чего "сверхестественного" вы ждете?! Совершенно непонятно.
Что касается временной хронологии, то как раз первым здесь появилась моя ссылка на другую аналогичную тему, где был представлен мой алгоритм.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.08.2011, 19:11     Определить количество максимальных элементов в массиве. #62
Цитата Сообщение от Сыроежка Посмотреть сообщение
Мой код профессиональный
А мой - нет!
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 <stdio.h>
    
int * max_element(const int * arr, size_t size){
    return ( size < 2 ) ? (int*)arr : ( *arr < *(arr + size - 1) ) ? max_element(arr + 1, size - 1) : max_element(arr, size - 1);
}
 
size_t count(const int * arr, size_t size, int val){
    return ( size ) ? ( *arr == val ) + count(arr + 1, size - 1, val) : 0;
}
 
void dump(const int * arr, size_t size){
    while ( size-- )
        printf("%d%c", *arr++, ( size ) ? ' ' : '\n');
}
 
#define SIZE 10
 
int main(void){
    int arr[SIZE] = { 1, 3, 5, 3, 2, 5, 4, 3, 1, 2 }, me = *max_element(arr, SIZE);
    
    printf("Array: ");
    dump(arr, SIZE);
    printf("Max element %d meets %d times.\n", me, count(arr, SIZE, me));
    
    return 0;
}


Вот ещё до кучи...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <map>
#include <algorithm>
#include <iterator>
    
int main(){
    const int size(10);
    int arr[size] = { 1, 3, 5, 3, 2, 5, 4, 3, 1, 2 };
    
    std::cout << "Array: ";
    std::copy(arr, arr + size, std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl;
    std::map<int, int> map;
    for ( int i = 0; i < size; ++i )
        map[arr[i]]++;
    std::cout << "Max element " << map.rbegin()->first << " meets " << map.rbegin()->second << " times." << std::endl;
    
    return 0;
}
Сыроежка
Заблокирован
29.08.2011, 19:33     Определить количество максимальных элементов в массиве. #63
Цитата Сообщение от easybudda Посмотреть сообщение
А мой - нет!
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 <stdio.h>
    
int * max_element(const int * arr, size_t size){
    return ( size < 2 ) ? (int*)arr : ( *arr < *(arr + size - 1) ) ? max_element(arr + 1, size - 1) : max_element(arr, size - 1);
}
 
size_t count(const int * arr, size_t size, int val){
    return ( size ) ? ( *arr == val ) + count(arr + 1, size - 1, val) : 0;
}
 
void dump(const int * arr, size_t size){
    while ( size-- )
        printf("%d%c", *arr++, ( size ) ? ' ' : '\n');
}
 
#define SIZE 10
 
int main(void){
    int arr[SIZE] = { 1, 3, 5, 3, 2, 5, 4, 3, 1, 2 }, me = *max_element(arr, SIZE);
    
    printf("Array: ");
    dump(arr, SIZE);
    printf("Max element %d meets %d times.\n", me, count(arr, SIZE, me));
    
    return 0;
}
Можно было бы возвращаемое значение из функции max_element сделать таким же, как и параметр массива, то есть const int * и не далать приведение типов (int*)arr Так как нет большого смысла возвращать не константную ссылку, так как в вашем алгоритме нет определенности, какой именно максимальный элемент последовательности возвращается. То есть если бы вы могли гарантировать, что ваша функция возвращает первый максимальный элемент в последовательности, или напротив, самый последний, то тогда пользователь мог бы воспользоваться не константным указателем, так как он представляет, с каким именно элементом он имеет дело. А так - это гадание на кофейной гуще.

А, возможно, я ошибся, и у вас всегда возвращается последний максимальный элемент, так как в случае равенства элементов, вы предпочитаете брать подмассив, исключая первый элемент.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
29.08.2011, 19:41     Определить количество максимальных элементов в массиве. #64
Цитата Сообщение от Сыроежка Посмотреть сообщение
Так как нет большого смысла возвращать не константную ссылку, так как в вашем алгоритме нет определенности, какой именно максимальный элемент последовательности возвращается.
Наверное, с высоты профессионализма такие мелочи и не видны, но вообще-то в С функции, возвращающие константные значения - UB (не мне рассказывать Вам, профессионалу, что это значит). А определённость как раз есть - функция возвращает указатель (да-да, в С нет ссылок, не задалось как-то с ними) на ПЕРВЫЙ максимальный элемент. Вы своим профессиональным взглядом внимательнее присмотритесь.
Сыроежка
Заблокирован
29.08.2011, 19:44     Определить количество максимальных элементов в массиве. #65
Цитата Сообщение от easybudda Посмотреть сообщение
Наверное, с высоты профессионализма такие мелочи и не видны, но вообще-то в С функции, возвращающие константные значения - UB (не мне рассказывать Вам, профессионалу, что это значит). А определённость как раз есть - функция возвращает указатель (да-да, в С нет ссылок, не задалось как-то с ними) на ПЕРВЫЙ максимальный элемент. Вы своим профессиональным взглядом внимательнее присмотритесь.
Да, я ошибся. В случае равенства у вас возвращается подмассив с исключением последнего элемента.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
29.08.2011, 19:53     Определить количество максимальных элементов в массиве. #66
Цитата Сообщение от Сыроежка Посмотреть сообщение
Да, я ошибся...

Не по теме:

Неужели это случилось-признание ошибки!

CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
29.08.2011, 20:37     Определить количество максимальных элементов в массиве. #67
Цитата Сообщение от Сыроежка Посмотреть сообщение
А чего "сверхестественного" вы ждете?! Совершенно непонятно.
В том то и дело, для чего упирать на профессионализм, если вы решили задачу очевидным способом? Чем Ваше, как вы зявляете, "профессиональное" решение отличается от решения ale_x_x, при условии что у Вас присутсвует совершенно ненужное поле?

Цитата Сообщение от Сыроежка Посмотреть сообщение
Что касается временной хронологии, то как раз первым здесь появилась моя ссылка на другую аналогичную тему, где был представлен мой алгоритм.
Первая ссылка на Ваше решение в посте #38, решение ale_x_x в #32.
Сыроежка
Заблокирован
30.08.2011, 20:12     Определить количество максимальных элементов в массиве. #68
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
В том то и дело, для чего упирать на профессионализм, если вы решили задачу очевидным способом? Чем Ваше, как вы зявляете, "профессиональное" решение отличается от решения ale_x_x, при условии что у Вас присутсвует совершенно ненужное поле?


Первая ссылка на Ваше решение в посте #38, решение ale_x_x в #32.
Спасибо, насмешили меня! Знаете, что такое профессионально написанный код? Это не тогда, как вы наивно думаете, задача решена не очевидным способом. К написанию кода это вообще никакого отношения не имеет, как вам лично это не покажется странным. Профессионально написанный код - это 1) грамотный, 2) корректный, 3) легко читаемый код. Более того он даже не обязан быть идеальным кодом!

Что касается ваших ссылок на посты, то я имел в виду хронологию, что алгоритм уже написан в ранее обсуждаемой аналогичной теме. То есть, фактически, происходило переписание ранее написанного алгоритма, да еще не совсем грамотно и с ошибками. Это я и имел в виду, что проще обратиться к той теме, а не переписывать заново некорректно уже написанный код. Иначе это похоже на испорченный граммофон.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
30.08.2011, 20:34     Определить количество максимальных элементов в массиве. #69
Не оптимально) Но вариант.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    if (vec.empty())
    {
        std::cerr << "Error. Empty sequence" << std::endl;
        return 1;
    }
    int element = *std::max_element(vec.begin(), vec.end());
    std::sort(vec.begin(), vec.end());
    std::pair<std::vector<int>::iterator, std::vector<int>::iterator> maxs = 
        std::equal_range(vec.begin(), vec.end(), element);
    std::cout << std::distance(maxs.first, maxs.second) << std::endl;
    return 0;
}
fasked
Эксперт C++
 Аватар для fasked
4924 / 2504 / 180
Регистрация: 07.10.2009
Сообщений: 4,306
Записей в блоге: 1
30.08.2011, 20:38     Определить количество максимальных элементов в массиве. #70
Цитата Сообщение от ForEveR Посмотреть сообщение
Не оптимально
Особенно, если учесть то, сколько в последовательности может быть элементов
Сыроежка
Заблокирован
30.08.2011, 20:40     Определить количество максимальных элементов в массиве. #71
Цитата Сообщение от ForEveR Посмотреть сообщение
Не оптимально) Но вариант.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <iostream>
#include <vector>
#include <iterator>
#include <algorithm>
 
int main()
{
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    if (vec.empty())
    {
        std::cerr << "Error. Empty sequence" << std::endl;
        return 1;
    }
    int element = *std::max_element(vec.begin(), vec.end());
    std::sort(vec.begin(), vec.end());
    std::pair<std::vector<int>::iterator, std::vector<int>::iterator> maxs = 
        std::equal_range(vec.begin(), vec.end(), element);
    std::cout << std::distance(maxs.first, maxs.second) << std::endl;
    return 0;
}
Если у вас используется сортировка, то надобность в алгоритме std::max_element просто отпадает. Достаточно отсортировать в убывающем порядке, а затем вывести в поток все элементы, которые совпадают с первым элементом контейнера.

Так что у вас есть еще пути совершенствования вашего алгоритма!

Например, так

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
 
int main()
{
    std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
    if ( vec.empty() )
    {
        std::cerr << "Error. Empty sequence" << std::endl;
        return 1;
    }
    std::sort(vec.begin(), vec.end(), std::greater<int>() );
    std::pair<std::vector<int>::iterator, std::vector<int>::iterator> maxs = 
        std::equal_range(vec.begin(), vec.end(), *v.begin() );
    std::cout << std::distance(maxs.first, maxs.second) << std::endl;
    return 0;
}
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
30.08.2011, 20:43     Определить количество максимальных элементов в массиве. #72
Цитата Сообщение от Сыроежка Посмотреть сообщение
Что касается ваших ссылок на посты, то я имел в виду хронологию, что алгоритм уже написан в ранее обсуждаемой аналогичной теме.
Во-первых, на форуме с большой вероятностью это же задача уже решалась таким же способом. Во-вторых, с чего Вы взяли, что alex_x_x видел Ваше решение? На форуме, а тем более в этом разделе, темы плодятся пачками, Вы сами-то все посты читаете, а?
Насчет некоректности, вот код alex_x_x:
Цитата Сообщение от alex_x_x Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
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; 
};
Где здесь некоректность? Философские споры об именовании и выборе подходящих типов откинем как не имеющие отношения к корретности/некорректности решения.
diagon
Higher
 Аватар для diagon
1920 / 1186 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
30.08.2011, 20:44     Определить количество максимальных элементов в массиве. #73
Или так(может, уже было, лень всю тему листать)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <map>
#include <algorithm>
int main()
{
    int arr[] = { 1, 2, 3, 5, 4, 5, 3 };
    
    std::map<int, int> map;
    
    std::for_each( arr, arr + sizeof(arr) / sizeof(*arr), [&map] (int x)
    {
        ++map[x];
    } );
    
    std::cout << (*--map.end()).second;
}
Сыроежка
Заблокирован
31.08.2011, 18:48     Определить количество максимальных элементов в массиве. #74
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Во-первых, на форуме с большой вероятностью это же задача уже решалась таким же способом. Во-вторых, с чего Вы взяли, что alex_x_x видел Ваше решение? На форуме, а тем более в этом разделе, темы плодятся пачками, Вы сами-то все посты читаете, а?
Насчет некоректности, вот код alex_x_x:

Где здесь некоректность? Философские споры об именовании и выборе подходящих типов откинем как не имеющие отношения к корретности/некорректности решения.
Я уже писал, где здесь некорректность. Не инициализирована переменная max. Поэтому алгоритм вообще не будет корректно работать. Кроме того грамотно писать не

C++
1
if (t > max || 0 == count)
а

C++
1
[CPP]if (0 == count || max < t)
[/CPP]

Заметили два различия? Именно два, а не одно? Первый исходный код просто является безграмотным, не говоря уж о том, что некорректным.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.08.2011, 19:12     Определить количество максимальных элементов в массиве. #75
Цитата Сообщение от Сыроежка Посмотреть сообщение
Кроме того грамотно писать...
Кстати да, прав Сыроежка. В принципе если эту строчку заменить, то и не важно, что max не инициализирована.
Цитата Сообщение от diagon Посмотреть сообщение
может, уже было
Ага, на предыдущей странице 62 пост 2 вариант...
Сыроежка
Заблокирован
31.08.2011, 19:17     Определить количество максимальных элементов в массиве. #76
К сожалению мой код никто, видимо, не запускал, а он содержит пропуск функционала. То есть должно быть не

C++
1
2
        std::pair<std::vector<int>::iterator, std::vector<int>::iterator> maxs = 
                std::equal_range(vec.begin(), vec.end(), *v.begin() );
а

C++
1
2
        std::pair<std::vector<int>::iterator, std::vector<int>::iterator> maxs = 
                std::equal_range(vec.begin(), vec.end(), *v.begin(), std::greater<int>() );
То есть нужен вызов этого алгоритма с предикатом.


Чтобы корректно написать код на основе этой идеи, то на самом деле можно обойтись без сортировки в убывающем порядке, чтобы найти максимум. Просто для поиска максимума можно воспользоваться обратными итераторами.

Вот как будет выглядеть код

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <functional>
 
int main()
{
        std::vector<int> vec((std::istream_iterator<int>(std::cin)), std::istream_iterator<int>());
        if ( vec.empty() )
        {
                std::cerr << "Error. Empty sequence" << std::endl;
                return 1;
        }
 
        std::sort(vec.begin(), vec.end(), std::greater<int>() );
 
        // Подсчет числа минимальных элементов
        std::pair<std::vector<int>::iterator, std::vector<int>::iterator> mins = 
                std::equal_range(vec.begin(), vec.end(), *v.begin() );
        std::cout << std::distance(mins.first, mins.second) << std::endl;
 
        // Подсчет числа максимальных элементов
        std::pair<std::vector<int>::reverse_iterator, std::vector<int>::reverse_iterator> maxs = 
                std::equal_range(vec.rbegin(), vec.rend(), *v.rbegin(), std::greater<int>() );
        std::cout << std::distance(maxs.first, maxs.second) << std::endl;
 
        return 0;
}
Но и это еще не все! На самом деле вместо алгоритмов std::equal_range проще пользоваться алгоритмом std::find_if, так как мы уже знаем, что последовательность упорядочена. Более того, эти алгоритмы в данном случае будут более эффективны, так как в противоположность им алгоритмы std::equal_range не принимают во внимание, что искомый элемент является первым (последним) в последовательности, и начинают его искать с помощью метода двоичного поиска.

Поэтому в вышеприведенном коде следует заменить алгоритмы std::equal_range на следующие предложения

C++
1
std::vector<int>::iterator it_min = std::find_if( vec.begin(), vec.end(), std::bind2nd( std::not_equal_to<int>(), *vec.begin() ) );
и

C++
1
std::vector<int>::reverse_iterator it_max = std::find_if( vec.rbegin(), vec.rend(), std::bind2nd( std::not_equal_to<int>(), *vec.rbegin() );
Соответственно и использовать функцию std::distance надо следующим образом

C++
1
std::distance( vec.begin(), it_min );
и

C++
1
std::distance( vec.rbegin(), it_max );

Теперь будет интересно посмотреть, кто предложит самый эффективный алгоритм подсчета числа максимальных или минимальных элементов в контейнере, который содержит всего один элемент!.

Добавлено через 2 минуты
Цитата Сообщение от easybudda Посмотреть сообщение
Кстати да, прав Сыроежка. В принципе если эту строчку заменить, то и не важно, что max не инициализирована.
Здесь также следует обратить внимание, что используется оператора >, тогда как для элементов контейнера требуется определение оператора <, а не >. То есть со многими определенными пользователем типами алгоритм не будет работать, так как пользователи не видят необходимости определять оператор >.
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
31.08.2011, 19:38     Определить количество максимальных элементов в массиве. #77
Цитата Сообщение от Сыроежка Посмотреть сообщение
C++
1
if (t > max || 0 == count)
Не инициализирована переменная max. Поэтому алгоритм вообще не будет корректно работать.
Алгоритм будет работать корректно. В max будет мусор в случае если T будет являтся примитивным типом, это, конечно, факт, но на работу это не повлияет. При первом же вызове оператора каким бы ни было значение max условие 0 == count будет истинным, а следственно произойдет присваивание max'у значения первого элемента последовательности. Проверьте.
Цитата Сообщение от Сыроежка Посмотреть сообщение
Первый исходный код просто является безграмотным, не говоря уж о том, что некорректным.
Это не production код, это код собранный на коленке для форума, в котором, естественно, могут быть огрехи. И это нужно понимать прежде чем бросатся с обвинениями в "непрофессионализме".
Сыроежка
Заблокирован
31.08.2011, 19:43     Определить количество максимальных элементов в массиве. #78
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Алгоритм будет работать корректно. В max будет мусор в случае если T будет являтся примитивным типом, это, конечно, факт, но на работу это не повлияет. При первом же вызове оператора каким бы ни было значение max условие 0 == count будет истинным, а следственно произойдет присваивание max значения первого элемента последовательности. Проверьте.
Вы заблуждаетесь! max может быть не "примитивным" типом, как вы пишите, а определенным пользователем объектом, который необязательно должен быть инициализирован конструктором по умолчанию. Кроме того, это значение max может случайно совпасть со значением элемента, и тогда вы счетчик увеличите на единицу.

Так что проблема не во мне, а в том, что вы этого не видите!

Добавлено через 4 минуты
Цитата Сообщение от CyBOSSeR Посмотреть сообщение

Это не production код, это код собранный на коленке для форума, в котором, естественно, могут быть огрехи. И это нужно понимать прежде чем бросатся с обвинениями в "непрофессионализме".
Код, собранный на коленках, может содержать опечатки, или какие-нибудь пропуски. Но тем не менее он должен быть написан грамотно.

Вы просто, как и многие не высококвалифицированные программисты, не понимаете простой вещи, что профессионал всегда пишет грамотный код. То есть нет у него такого, что в одном случае он пишет безграмотный код, а в другом случае грамотный. Он просто не способен писать безграмотный код, так как этому мешает его профессиональный опыт. Я вам уже написал выше, что означает профессионально написанный код. Вы же там ждали какого-то чуда, и это чудо считали профессионально написанным кодом.

Я смотрю, вы многое в программировании не понимаете!
CyBOSSeR
Эксперт C++
 Аватар для CyBOSSeR
2293 / 1663 / 86
Регистрация: 06.03.2009
Сообщений: 3,675
31.08.2011, 19:49     Определить количество максимальных элементов в массиве. #79
Цитата Сообщение от Сыроежка Посмотреть сообщение
max может быть не "примитивным" типом, как вы пишите, а определенным пользователем объектом, который необязательно должен быть инициализирован конструктором по умолчанию.
Как этот факт отражен в Вашем решении? И как Вы предлагаете обойти эту ситуацию?
Цитата Сообщение от Сыроежка Посмотреть сообщение
Кроме того, это значение max может случайно совпасть со значением элемента, и тогда вы счетчик увеличите на единицу.
О чем вы? Каким бы нибыло значение max при первом вызове будет выполнено тело первого условного оператора. Посмотрите внимательно.
Цитата Сообщение от Сыроежка Посмотреть сообщение
Так что проблема не во мне, а в том, что вы этого не видите!
Пока я вижу человека, который бросается обвинениями и не в состоянии проанализировать пять строк кода.

Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы просто, как и многие не высококвалифицированные программисты, не понимаете простой вещи, что профессионал всегда пишет грамотный код. То есть нет у него такого, что в одном случае он пишет безграмотный код, а в другом случае грамотный. Он просто не способен писать безграмотный код, так как этому мешает его профессиональный опыт. Я вам уже написал выше, что означает профессионально написанный код. Вы же там ждали какого-то чуда, и это чудо считали профессионально написанным кодом.
Мда... Печаль... Вы либо слишком молоды, либо слишком категоричны.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.08.2011, 20:11     Определить количество максимальных элементов в массиве.
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9372 / 5422 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
31.08.2011, 20:11     Определить количество максимальных элементов в массиве. #80
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от CyBOSSeR Посмотреть сообщение
Алгоритм будет работать корректно.
Странно, но работает. Я-то думал, что если t <= max, то чему там count равно уже не проверяется... Или ещё какой-то тонкости не улавливаю?

Вот кстати ещё одно очень простое любительское решение
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <algorithm>
 
int main(){
    const int size(10);
    int arr[size] = { 1, 3, 5, 3, 2, 5, 4, 3, 1, 2 };
    int me = *std::max_element(arr, arr + size);
    std::cout << "Max element: " << me << " meets " << std::count(arr, arr + size, me) << " times" << std::endl;
    
    return 0;
}
Может тоже было, но на вскидку не нашёл в этой теме.


Цитата Сообщение от Сыроежка Посмотреть сообщение
Вы просто, как и многие не высококвалифицированные программисты, не понимаете...
Вот ей-богу надоело уже! Оставьте при себе своё мнение о профессионализме участников форума, а то ведь в правилах есть пункт "неуважительное отношение". С совсем небольшой натяжкой вполне применим. Надо оно Вам?

Добавлено через 4 минуты
А чем, кстати, по умолчанию поля типа int в классе инициализируются? Случайно не INT_MIN (ну или как там в С++ правильно минимальное значение обозначается)? А то есть подозрение, что минимальный элемент вот как-раз из-за этого нюанса и не найдётся, и не посчитается...
Yandex
Объявления
31.08.2011, 20:11     Определить количество максимальных элементов в массиве.
Закрытая тема Создать тему
Опции темы

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