задача "Домашнее задание" на 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 шт):
Да все просто, вы не подумали, что минимальное может быть после максимального.
Между строками
}
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;
}
}