Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Показать сообщение отдельно
Сыроежка
Заблокирован
29.08.2011, 19:33 0

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

29.08.2011, 19:33. Просмотров 9106. Ответов 88
Метки (Все метки)

Ответ

Цитата Сообщение от 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 Так как нет большого смысла возвращать не константную ссылку, так как в вашем алгоритме нет определенности, какой именно максимальный элемент последовательности возвращается. То есть если бы вы могли гарантировать, что ваша функция возвращает первый максимальный элемент в последовательности, или напротив, самый последний, то тогда пользователь мог бы воспользоваться не константным указателем, так как он представляет, с каким именно элементом он имеет дело. А так - это гадание на кофейной гуще.

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

Вернуться к обсуждению:
Определить количество максимальных элементов в массиве.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.08.2011, 19:33

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

В массиве из 50 элементов определить количество элементов, кратных 6 и найти минимальный элемент
В массиве из 50 элементов определить количество элементов, кратных 6 и найти...

В массиве X определить количество элементов
В массиве X определить количество элементов меньших среднего ариф*метического...

0
Другие темы раздела
C++ Найти число элементов массива, которые больше своих “соседей” http://www.cyberforum.ru/cpp-beginners/thread345621.html
Найти число элементов массива, которые больше своих “соседей”, т.е. предшествующего и последующего элементов.
C++ Математически описанный алгоритм -> C++ Имеется статья с алгоритмом. В С++ я новичок потому не очень понятно, как все же описать математические термины(см.картинку) и как сделать пересечение множеств(предполагалось использование библ.... http://www.cyberforum.ru/cpp-beginners/thread345593.html
C++ Как тут происходит перестановка байтов...
Вот в книге Шилдта 4-е издание... есть такой пример: #include <iostream> #include <cstdio> #include <cstring> #include <windows.h> using namespace std; union swap_byte
Проблема в стэке C++
Всем Привет! Я делал упражнение на тему стэков, вроде всё сделал, но вылетает какая-то глупая ошибка. Вот код, я думаю, можно не объяснять, что должна делать программа, но если потребуется, объясню....
C++ Список, стек и очередь. http://www.cyberforum.ru/cpp-beginners/thread345534.html
Файл содержит вещественные числа. Нужно удвоит вхождение всех чисел N. Решить с помощью стека, списка и очереди в С++. Вся информация считывается и выводится в файл, из консоли ничего не считывается...
C++ Возведение в степень n с помощью рекурсии #include<iostream> using namespace std; int funk(int,int); int main () {setlocale(LC_ALL,"Rus"); int a=2,n=5; cout<<funk(a,n); cin.get(); cin.get(); return 0; подробнее
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru