Предмет: Информатика, автор: Аноним

с++
Домашнее задание
Петя успевает по математике лучше всех в классе, поэтому учитель задал ему сложное домашнее задание, в котором нужно в заданном наборе целых чисел найти сумму всех положительных элементов, затем найти где в заданной последовательности находятся максимальный и минимальный элемент и вычислить произведение чисел, расположенных в этой последовательности между ними. Так же известно, что минимальный и максимальный элемент встречаются в заданном множестве чисел только один раз и не являются соседними. Поскольку задач такого рода учитель дал Пете около ста, то Петя как сильный программист смог написать программу, которая по заданному набору чисел самостоятельно находит решение. А Вам слабо?

Входные данные

В первой строке записано единственное число N (N≤15) — количество элементов массива. Вторая строка содержит N целых чисел, представляющих заданный массив. Все элементы массива разделены пробелом. Каждое из чисел во входном файле, в том числе и N, не превышает 20 по абсолютной величине.

Выходные данные

В единственную строку нужно вывести два числа, разделенных пробелом: сумму положительных элементов и произведение чисел, расположенных между минимальным и максимальным элементами. Значения суммы и произведения не превышают по модулю 106.

Примеры
Ввод
Вывод
5
-1 -10 2 6 7
15 12

Ответы

Автор ответа: Аноним
2

#include <iostream>

#include <vector>

using namespace std;

int pos_sum(vector<int> &v){

   int res = 0;

   for(auto &i : v)

       res += i * (i > 0);

   return res;

}

int min_max_mult(vector<int> &v){

   int res = 1;

   pair<int,int> mn,mx;

   mn = {v[0],0};

   mx = mn;

   for(int i = 1; i < v.size(); i++){

       if(v[i] > mx.first){

           mx.first = v[i];

           mx.second = i;

       }

       if(v[i] < mn.first){

           mn.first = v[i];

           mn.second = i;

       }

   }

   int st = min(mn.second, mx.second), fn = max(mn.second,mx.second);

   for(int i = st + 1; i < fn; i++)

       res *= v[i];

   return res;

}

int main(){

   int n;

   cin >> n;

   vector<int> a(n);

   for(auto &i : a) cin >> i;

   cout << pos_sum(a) << " " << min_max_mult(a);

}

Похожие вопросы