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

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

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

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

26.08.2011, 19:26. Просмотров 7903. Ответов 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++

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
26.08.2011, 20:10 #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::vector< int > vec;
 
    std::cout << "Enter array (terminated by Ctrl + Z): ";
 
    std::copy(std::istream_iterator< int > (std::cin), std::istream_iterator< int > (), std::back_inserter(vec));
 
    std::cout << "Count of max elems: " << std::count(vec.begin(), vec.end(), *std::max_element(vec.begin(), vec.end())) << std::endl;
 
    return 0;
}
0
xAtom
915 / 740 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
26.08.2011, 20:19 #3
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
31
#include <iostream>
using namespace std;
 
template<typename T>
int max_count(const T*  arr, int size) {
    int len;
    const T* iter;
    int sz;
    T   tmax = *arr;
 
    for(sz = size, iter = arr; sz; sz--, *iter++) {
         if( *iter > tmax )
               tmax = *iter;
    }
    for(len = 0, sz = size, iter = arr; sz; sz--, *iter++) {
         if( *iter == tmax )
               ++len;
    }
    return len;
}
 
int  main(void) {
 
    int iarr[]  = { 1200,  3000, -400, 3000, 322, 3000 };
    double darr[] = { 0.765, 45.57, 4.4, 45.57, -78.8 };
    
    cout << max_count(iarr, sizeof(iarr) / sizeof(iarr[0])) << endl;
    cout << max_count(darr, sizeof(darr) / sizeof(darr[0])) << endl;
 
    return 0;
}
0
Сыроежка
Заблокирован
26.08.2011, 20:23 #4
Цитата Сообщение от silent_1991 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
 
int main()
{
    std::vector< int > vec;
 
    std::cout << "Enter array (terminated by Ctrl + Z): ";
 
    std::copy(std::istream_iterator< int > (std::cin), std::istream_iterator< int > (), std::back_inserter(vec));
 
    std::cout << "Count of max elems: " << std::count(vec.begin(), vec.end(), *std::max_element(vec.begin(), vec.end())) << std::endl;
 
    return 0;
}
Если вектор пустой, то ваш алгоритм некорректный, так как вы пытаетесь разыменовать итератор, указывающий за границу вектора.
0
silent_1991
Эксперт С++
4964 / 3040 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
26.08.2011, 21:12 #5
Цитата Сообщение от Сыроежка Посмотреть сообщение
Если вектор пустой, то ваш алгоритм некорректный, так как вы пытаетесь разыменовать итератор, указывающий за границу вектора.
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 <algorithm>
#include <iterator>
 
int main()
{
    std::vector< int > vec;
 
    std::cout << "Enter array (terminated by Ctrl + Z): ";
 
    std::copy(std::istream_iterator< int > (std::cin), std::istream_iterator< int > (), std::back_inserter(vec));
 
    if (vec.empty())
        std::cout << "Vector is empty!" << std::endl;
    else
        std::cout << "Count of max elems: " << std::count(vec.begin(), vec.end(), *std::max_element(vec.begin(), vec.end())) << std::endl;
 
    return 0;
}
0
Сыроежка
Заблокирован
26.08.2011, 21:19 #6
Цитата Сообщение от silent_1991 Посмотреть сообщение
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 <algorithm>
#include <iterator>
 
int main()
{
    std::vector< int > vec;
 
    std::cout << "Enter array (terminated by Ctrl + Z): ";
 
    std::copy(std::istream_iterator< int > (std::cin), std::istream_iterator< int > (), std::back_inserter(vec));
 
    if (vec.empty())
        std::cout << "Vector is empty!" << std::endl;
    else
        std::cout << "Count of max elems: " << std::count(vec.begin(), vec.end(), *std::max_element(vec.begin(), vec.end())) << std::endl;
 
    return 0;
}
Увы, иногда красивые лаконичные записи не всегда бывают корректными особенно, когда алгоирмты связываются в цепочку вызовов. приходится проверять результат предыдущегог выполнения.

В основном корректно такие цепочки работают в тех случаях, когда возвращаемым значением алгоритма является выходной итератор, который передается на вход другому алгоритму также в качестве выходного итератора.
0
валентин777
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 45
27.08.2011, 16:35  [ТС] #7
А На простом С можно эту же программу ???????????
0
Сыроежка
Заблокирован
27.08.2011, 20:48 #8
Цитата Сообщение от валентин777 Посмотреть сообщение
А На простом С можно эту же программу ???????????
А что вы подразумеваете под "простым С"?
0
валентин777
0 / 0 / 0
Регистрация: 01.06.2011
Сообщений: 45
28.08.2011, 02:50  [ТС] #9
просто С !
0
Петррр
5957 / 3394 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
28.08.2011, 10:40 #10
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();
}
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
28.08.2011, 10:55 #11
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
#include <stdio.h>
 
#define N 10
 
int main(void)
{
    int a[N];
    int i, j, c;
 
    for(i = 0; i < N; ++i)
        scanf("%d", &a[i]);
 
    j = 0;
    for(i = 1; i < N; ++i)
        if(a[i] > a[j]) j = i;
 
    c = 1;
    for(i = j+1; i < N; ++i)
        if(a[j] == a[i]) ++c;
 
    printf("result: %d\n", c);
 
    return 0;
}
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 13:15 #12
rangerx и Петррр, можно за один проход по массиву решить задачу:
http://www.cyberforum.ru/showthread.php?p=1942781

rangerx, вы пытались оптимизировать, но максимальный элемент мог находиться на первом месте.
0
rangerx
1933 / 1542 / 141
Регистрация: 31.05.2009
Сообщений: 2,912
28.08.2011, 14:00 #13
Цитата Сообщение от Thinker Посмотреть сообщение
rangerx, вы пытались оптимизировать, но максимальный элемент мог находиться на первом месте.
И?
P.S. Это называется не оптимизация, а отсутствие пессимизации ))
0
Thinker
Эксперт C++
4226 / 2200 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.08.2011, 14:50 #14
Цитата Сообщение от rangerx Посмотреть сообщение
И?
P.S. Это называется не оптимизация, а отсутствие пессимизации ))
Просто на месте массива файлы могут быть, списки и т.д. А уж по ним несколько раз бегать не очень хорошо.
0
AvengerAlive
5 / 5 / 0
Регистрация: 30.07.2011
Сообщений: 257
28.08.2011, 15:41 #15
Вот простенький код работает за один проход. Если элемент равен текущему максимальному то счётчик увеличивается, если же больше, то ставим результат на 1, и задаём новый максимум.
C++
1
2
3
4
for (i=0; i<n; i++) {
if (a[i]==max) res++;
else if (a[i]>max) { max=a[i]; res=1; }
}
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.08.2011, 15:41
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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