30.10.2012, 23:45
|
#5 (permalink)
|
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
Вот только компилятор другой (первую задачу не я писал)
Цитата:
#include <algorithm>
#include <boost/algorithm/minmax_element.hpp>
typedef std:air<const int*, const int*> minmax_result;
const int N = 10;
// для примера последовательность содержит случайные числа
static void fill_array(int* parray, size_t dimension)
{
std::generate_n(parray, dimension, std::rand);
}
void test1()
{
/*
1. Дана последовательность из 10 целых чисел. Найти сумму чисел
этой последовательности, расположенных между максимальным и
минимальными числами (в сумму включить и оба этих числа).
*/
int arr[N];
fill_array(arr, N);
// ищем индексы минимального и максимального элементов
minmax_result minmax = boost::minmax_element(arr, arr+N);
ptrdiff_t diff = minmax.first - minmax.second;
// суммирование
int sum;
// учтём, что индексы миниального и максимального элемента могут располагаться в массиве как угодно
// друг относительно друга.
if (diff > 0)
{
sum = std::accumulate(minmax.second, minmax.first, *minmax.first);
}
else
{
sum = std::accumulate(minmax.first, minmax.second, *minmax.second);
}
}
|
|
|
|