Домашнее задание
Петя успевает по математике лучше всех в классе, поэтому учитель задал ему сложное домашнее задание, в котором нужно в заданном наборе целых чисел найти сумму всех положительных элементов, затем найти где в заданной последовательности находятся максимальный и минимальный элемент и вычислить произведение чисел, расположенных в этой последовательности между ними. Так же известно, что минимальный и максимальный элемент встречаются в заданном множестве чисел только один раз и не являются соседними. Поскольку задач такого рода учитель дал Пете около ста, то Петя как сильный программист смог написать программу, которая по заданному набору чисел самостоятельно находит решение. А Вам слабо?
Входные данные
В первой строке записано единственное число N (N≤15) — количество элементов массива. Вторая строка содержит N целых чисел, представляющих заданный массив. Все элементы массива разделены пробелом. Каждое из чисел во входном файле, в том числе и N, не превышает 20 по абсолютной величине.
Выходные данные
В единственную строку нужно вывести два числа, разделенных пробелом: сумму положительных элементов и произведение чисел, расположенных между минимальным и максимальным элементами. Значения суммы и произведения не превышают по модулю 106.
ПОМОГИТЕ ПЖ ПИШЕТ ЧТО ПРОГРАММА ВЫДАЁТ НЕПРАВЕЛЬНЫЙ ОТВЕТ
#include
#include
using namespace std;
int main()
{
int s = 0, l = 1, n;
cin >> n;
vector v(n);
for (int i = 0; i < n; ++i)
{
cin >> v[i];
if (v[i] > 0)
{
s += v[i];
}
}
int imn = 0, imx = 0;
for (int i = 0; i < n; ++i)
{
if (v[i] < v[imn])
{
imn = i;
}
if (v[i] > v[imx])
{
imx = i;
}
}
if (imn > imx)
{
swap(v[imn], v[imx]);
}
for (int i = imn; i < imx; i++)
{
if (v[i] > 0)
{
l *= v[i];
}
}
cout << s << " " << l;
return 0;
}
Ответы
короче, я сделал так что строго между минимум и максимумом, можешь изменить потом, если нужно включая индексы мин и макса
#include<bits/stdc++.h>
#define ll long long
#define fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0)
#define pb push_back
#define in insert
#define popb pop_back
#define ul unsigned long int
#define ld long double
using namespace std;
ll m, n, k, b, a[10000];
vector <ll> p;
string s, t, c;
set <int> st;
int main(){
fast;
cin >> n;
ll ans = 0, cnt = 1, mx = (ll)1e9 + 1, mn = (ll)-1e9 + 123, i = 0, idmn = 0, idmx = 0;
while(n--){
cin >> a[i];
if (a[i] % 2 == 0){
ans += a[i];
ans %= 106;
}
if (mx < a[i]){
mx = a[i];
idmx = i;
}
else if (mn > a[i]){
mn = a[i];
idmn = i;
}
i++;
}
ll idmn1 = min(idmn, idmx);
ll idmx2 = max(idmn, idmx);
for (int i = idmn1; i < idmx2; i++){
cnt *= a[i];
cnt %= 106;
}
cout << ans % 106 << ' ' << cnt % 106;
return 0;
}