Найти максимальную из сумм положительных элементов беспрерывной последовательности С++
Например есть одномерный динамический массив в котором есть такие числа: {-5; 50; -5; 1; 2; 3;} максимальная сумма последовательности - 6. Так как последовательность считается только если есть 3 и более положительных элементов подряд. Или например массив : {-5; 4; 3; 2;} - должно вывести 9. У меня вышло так, не понимаю как это будет правильнее переделать. Как бы добавить счётчик чтоб оно правильно считало сумму. Прилагаю 2 варианта, один в комментарии другой нет.
#include <iostream>
#include <ctime>
#include <windows.h>
#include <math.h>
using namespace std;
int main() {
int n = 0;
int max = 0;
int sum = 0;
int kount = 0;
//int index_kount_first = 0, index_kount_first = 0;
cout << "Eneter cout of el massiv: " << endl;
cin >> n;
int* arr = new int[n];
cout << "Eneter el massiv: " << endl;
//Заполнение массива
for (int i = 0; i < n; i++) {
//arr[i] = rand() % 10;
cin >> arr[i];
}
//Вывод массива
for (int i = 0; i < n; i++) {
cout << arr[i] << "\t";
}
for (int i = 0; i < n; i++) {
if (arr[i] < 0) {
sum = 0;
kount = 0;
}
else {
//Счётчик который должен быть не менее 3 чтобы найти последовательность
/*for (int j = 0; j < (i + 1); j++) {
if (arr[j] > 0) {
kount += 1;
}
else {
kount = 0;
}
}
//Если элемент положительный и счётчик больше или равен 3 тогда считаем сумму последовательность положительных чисел
if (kount >= 3 && arr[i] > 0) {
cout << "kount = " << kount << endl;
sum = sum + arr[i-2] + arr[i-1] + arr[i];
if (max < sum) {
max = sum;
}
if (kount >= 3) {
for (int y = kount - 2; y < kount; y++) {
int k = 0;
while (arr[i - 2] > 0) {
k++;
sum += arr[i - 2];
if (max < sum) {
max = sum;
}
break;
if (k > 3)
break;
}*/
while (arr[i + 1] > 0) {
sum += arr[i + 1];
if (max < sum) {
max = sum;
}
break;
}
}
cout << "Max: " << max << endl;
}
delete[] arr;
}
Ответы (1 шт):
Автор решения: MBo
→ Ссылка
Примерно так:
for (int i = 0; i <= n; i++) {
if (i<n && arr[i] > 0) {
kount++;
sum+=arr[i];
}
else {
if kount > 2
maxsum = max(sum, maxsum);
kount = 0;
sum = 0;
}
}