C/C++

С++ Петя успевает по математике лучше всех в классе, поэтому учитель задал ему сложное домашнее задание,

Домашнее задание
Петя успевает по математике лучше всех в классе, поэтому учитель задал ему сложное домашнее задание, в котором нужно в заданном наборе целых чисел найти сумму всех положительных элементов, затем найти где в заданной последовательности находятся максимальный и минимальный элемент и вычислить произведение чисел, расположенных в этой последовательности между ними. Так же известно, что минимальный и максимальный элемент встречаются в заданном множестве чисел только один раз и не являются соседними. Поскольку задач такого рода учитель дал Пете около ста, то Петя как сильный программист смог написать программу, которая по заданному набору чисел самостоятельно находит решение. А Вам слабо?

Входные данные

В первой строке записано единственное число N (N≤15) — количество элементов массива. Вторая строка содержит N целых чисел, представляющих заданный массив. Все элементы массива разделены пробелом. Каждое из чисел во входном файле, в том числе и N, не превышает 20 по абсолютной величине.

Выходные данные

В единственную строку нужно вывести два числа, разделенных пробелом: сумму положительных элементов и произведение чисел, расположенных между минимальным и максимальным элементами. Значения суммы и произведения не превышают по модулю 10^6.
#include "iostream"
#include "fstream"
using namespace std;

int main()
{
int *arr, n, sum = 0, p = 1;

ifstream fin("input.txt");

fin >> n;

arr = new int[n];

for (int i = 0; i < n; i++) {
fin >> arr[i];
}

int indexOfMax = 0, indexOfMin = 0;

for (int i = 0; i < n; i++) {
if (arr[i] > 0) {
sum += arr[i];
}
if (arr[i] > arr[indexOfMax]){
indexOfMax = i;
}
if (arr[i] < arr[indexOfMin])
indexOfMin = i;
}

if (indexOfMax < indexOfMin)
swap(indexOfMax, indexOfMin);

for (int i = indexOfMin + 1; i < indexOfMax; ++i)
p *= arr[i];
ofstream f("output.txt");
f << sum << " " << p;
fin.close();
f.close();
system("pause");
return 0;
}
Евгений Дементьев
Евгений Дементьев
1 374
Лучший ответ
#include <iostream>
using namespace std; int main()
{ int i, imin, imax, min, max, n, s = 0;
long long p = 1; cin >> n; int a[n]; cin >> a[0];
min = max = a[0]; imin = imax = 0;
for (i = 1; i < n; i++) { cin >> a[i]; if (a[i] > 0)
s += a[i]; if (a[i] > max) { max = a[i]; imax = i; }
if (a[i] < min) { min = a[i]; imin = i; } }
if (imin > imax) swap(imin, imax);
for (i = imin + 1; i < imax; i++) p *= a[i];
cout << s << ' ' << p << endl; }
Нурмухамет Перне спасибо но там уже еврей написал первый чем вы.
Ага, не выйдет!
Maxim Valerevih
Maxim Valerevih
103