Как изменить программу "произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами"?

Помогите поменять программу, нужно найти произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами. Получилось сделать так, что если максимальный элемент расположен "ниже" минимального то произведение находится. Но в том случае если минимальный находится "ниже" максимального по массиву, то программа высчитывает произведение от минимального к максимальному. Как поменять программу так, чтобы она высчитывала произведение начиная от максимального элемента до минимального даже в том случае, если max элемент стоит после min? Например, рандомно программа выдала числа 3 -2 6 4 8 5. Мин. число - -2, макс - 8. На данный момент считается так: 6 умножить 4, надо сделать, чтобы считала: 5 умножить 3

#include <iostream>
#include <ctime>

using namespace std;

int main()
{
    setlocale(LC_ALL, "ru");
    srand(time(NULL));

    const int SIZE = 5;
    int arr[SIZE];
    int a = 0, min, max, x, y, p = 1, z;
    for (int i = 0; i < SIZE; i++)
    {
        arr[i] = rand() % 101 + (-50);
    }

    for (int i = 0; i < SIZE; i++)
    {
        cout << arr[i] << "\t";
    }
    cout << endl;
    for (int i = 0; i < SIZE; i++)
    {
        if (arr[i] > 0)
        {
            a += arr[i];
        }
    }
    cout << "Сумма всех положительных чисел: " << a;
    min = INT_MAX;
    max = INT_MIN;
    for (int i = 0; i < SIZE; i++)
    {
        if (abs(arr[i]) < min)
        {
            min = abs(arr[i]);
            x = i;
        }
        if (abs(arr[i]) > max)
        {
            max = abs(arr[i]);
            y = i;
        }
    }
    cout << "\n" << " Ячейка массива с мин. по модулю значением " << x << "\n Ячейка массива с макс. по модулю значением " << y;
    if (x < y) {
        for (int i = x + 1; i < y; i++)
        {
            p *= arr[i];
        }
    }
    else  if (y < x) {
        for (int i = y + 1; i < x; i++)
        {
            p *= arr[i];
        }
    }
    cout << "\n" << "Произведение чисел между максимальным и минимальным по модулю элементом: " << p;
}

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

Автор решения: return
#include <iostream>

inline void swap(unsigned long* a, unsigned long* b) {
    const unsigned long temp = *a;
    *a = *b;
    *b = temp;
}
int main() {
    const unsigned long arrLen = 7;
    const long arr[] = { 4, 1, 8, 17, 4, 54, 1 };

    unsigned long minInd = 0;
    unsigned long maxInd = 0;

    for (unsigned long i = 0; i < arrLen; ++i)
        if (abs(arr[i]) < abs(arr[minInd]))
            minInd = i;
        else if (abs(arr[i]) > abs(arr[maxInd]))
            maxInd = i;

    if (maxInd < minInd) swap(&minInd, &maxInd);

    long prod = 1U;

    for (unsigned long i = minInd; i <= maxInd; ++i)
        prod *= arr[i];

    std::cout << "from MIN to MAX: " << prod << std::endl;

    prod = 1U;

    for (unsigned long i = maxInd; i < arrLen; ++i)
        prod *= arr[i];
    for (unsigned long i = 0; i <= minInd; ++i)
        prod *= arr[i];
    
    std::cout << "from MAX to MIN: " << prod << std::endl;
}
→ Ссылка