Произведение элементов между минимумом и максимумом - WA на 2 тесте

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

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

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

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

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

#include <iostream>
#include <vector>
using namespace std;

int main(){
    int n, b=1, c=0;
    cin >> n;
    vector<int> v(n);
    int imn=21, imx=-21;
    for(int i=0; i<n; ++i){
        cin >> v[i];
        if (v[i]<imn){
            imn=i;
        }
        if (v[i]>imx){
            imx=i;
        }
        if (v[i]>0){
            c += v[i];
        }
    }
    for(int i=imn+1; i<imx; ++i){
        b *= v[i];
    }
    cout << c << " " << b;
}

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

Автор решения: Qwertiy
int imn=21, imx=-21;

Тебе нужны не значения, а индексы.

int imn = 0, imx = 0;

Тогда надо будет поменять сравнения:

if (v[i]<imn){
if (v[i] < v[imn]) {
if (v[i]>imx){
if (v[i] > v[imx]) {

for(int i=imn+1; i<imx; ++i){

А кто сказал, что минимум встречается раньше максимума?

for(int i=(imn>imx?imx:imn)+1, r=imn>imx?imn:imx; i<r; ++i) {

Думаю, если всё это исправить, должно получиться.

→ Ссылка