Задача: Получить произведение элементов массива ,которые находятся между первым положительным и последнем отрицательным элементом массива
Помогите пожалуйста разобраться ,в чем причина проблемы. Найти первый положительный и последний отрицательный элементы получилось(хоть и сделал это замудренно), а вот когда дошло дело до нахождения произведения ,тут пошли трудности,и я не знаю , в чем может быть причина
#include <iostream>
#include <time.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
#define N 6
int main()
{
setlocale(LC_ALL, "ru");
srand(time(NULL));
int mass[N];
//Заполняем массив и выводим на экран
for (int i = 0; i < N; ++i)
{
mass[i] = rand() % 100;
cout << mass[i] << "\t";
}
unsigned int proizv = 1;
int first_plus, last_minus;
//Ищем первый положительный элемент массива
for (int i = 0; i < N; ++i)
if (mass[i] % 2 == 0)
{
cout << "\nПервый положительный элемент: " << mass[i] << endl;
first_plus = i;
break;
}
//Иверсируем массив ,для нахождения последнего отрицательного элемента
for (int i = 0; i < (N / 2); i++) {
int c = mass[i];
mass[i] = mass[N - 1 - i];
mass[N - 1 - i] = c;
}
//Ищем последний отрицательный элемент массива
for (int i = 0; i < N; ++i)
if (mass[i] % 2 != 0)
{
cout << "\nПоследний отрицательный элемент: " << mass[i] << endl;
last_minus = i;
break;
}
//Приводим массив в изначальный вид
for (int i = 0; i < (N / 2); i++) {
int c = mass[i];
mass[i] = mass[N - 1 - i];
mass[N - 1 - i] = c;
}
//!!!!!ТУТ НАЧИНАЕТСЯ ПРОБЛЕМА!!!!!!
//Сортируем...
for (int i = first_plus + 1;i< last_minus; i++)
{
proizv *= mass[i];
}
cout <<"\nПроизведение нужных элементов: "<< proizv << endl;
system("pause");
return 0;
}
Ответы (1 шт):
Автор решения: vlad9i2
→ Ссылка
Во-первых у вас в коде находится первое положительное число последнее нечётное. Чтобы находить первое положительное условие должно быть mas[i] > 0.
Во-вторых у вас неправильный индекс последнего отрицательного
В-третьих операция логического и в С обзначается как &&, так что вместо and следует написать &&
unsigned int proizv = 1; int first_plus, last_minus; //Ищем первый положительный элемент массива for (int i = 0; i < N; ++i) if (mass[i] > 0) { cout << "\nПервый положительный элемент: " << mass[i] << endl; first_plus = i; break; } //Ищем последний отрицательный элемент массива for (int i = N - 1; i >= 0; --i) { if (mass[i] < 0) { last_minus = i; } } for (int i = first_plus + 1 ; i < last_minus; i++) { proizv *= mass[i]; } // Если last_minus раньше first_plus: for (int i = last_minus + 1 ; i < first_plus; i++) { proizv *= mass[i]; } cout <<"\nПроизведение нужных элементов: "<< proizv << endl; system("pause"); return 0;
