Как изменить программу "произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами"?
Помогите поменять программу, нужно найти произведение элементов массива, расположенных между максимальным и минимальным по модулю элементами. Получилось сделать так, что если максимальный элемент расположен "ниже" минимального то произведение находится. Но в том случае если минимальный находится "ниже" максимального по массиву, то программа высчитывает произведение от минимального к максимальному. Как поменять программу так, чтобы она высчитывала произведение начиная от максимального элемента до минимального даже в том случае, если 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 шт):
#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;
}