задача "Домашнее задание" на c++

Домашнее задание

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

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

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

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

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

Примеры

Ввод

5

-1 -10 2 6 7

Вывод

15 12

вот моя попытка решить задачу. два теста на сириусе проходит, дальше не хочет :(

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

у кого - то другого уже был такой вопрос, но мне хотелось бы закончить именно свой код

#include <iostream>
#include <vector>
using namespace std;
int main()
{
  int n, i, a, b, mn = 21, mx = -21, p = 1, s = 0;
  cin >> n;
  vector<int> v(n);
  for (i = 0; i < n; i++){
    cin >> v[i];
    if (v[i] > 0){
      s += v[i];
    }
  }
  for (i = 0; i < n; i++){
    if (v[i] < mn){
      mn = v[i];
      a = i;
    }
    if (v[i] > mx){
      mx = v[i];
      b = i;
    }
  }
  for (i = a + 1; i < b; i++){
    p *= v[i];
  }
  cout << s << " " << p;
}

Ответы (1 шт):

Автор решения: Harry

Да все просто, вы не подумали, что минимальное может быть после максимального.

Между строками

}
for (i = a + 1; i < b; i++){

добавьте:

}
if (a > b)
{
    int i = a;
    a = b;
    b = i;
}
for (i = a + 1; i < b; i++){

Кстати, второй цикл вполне можно внести в первый:

for (i = 0; i < n; i++){
    cin >> v[i];
    if (v[i] > 0){
        s += v[i];
    }
    if (v[i] < mn){
        mn = v[i];
        a = i;
    }
    if (v[i] > mx){
        mx = v[i];
        b = i;
    }
}
→ Ссылка