#include <bits/stdc++.h>
using namespace std;
void printpair(int ar[], int n)
{
    int largestsum = INT_MIN, currentsum = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = i; j < n; j++)
        {
            currentsum = 0;
            largestsum = INT_MIN;
            for (int k = i; k <= j; k++)
            {
                cout << ar[k] << ",";
                currentsum += ar[k];
            }

            cout << "\n";
        }

        largestsum = max(largestsum, currentsum);
        cout << "the largest sum is " << largestsum << endl;
    }
}

int main()
{
    int n;
    cin >> n;
    int ar[n];
    for (int i = 0; i < n; i++)
        cin >> ar[i];
    printpair(ar, n);
}

Когда я ввожу
5
-5 5 6-7 1
Я получаю результат первой итерации внешнего цикла как

-5,
-5,5,
-5,5,6,
-5,5,6,-7,
-5,5,6,-7,1,
the largest sum is 0
...


но должно быть 6, так как -5 + 5 + 6 = 6, поэтому наибольшая сумма подмассива должна быть 6, но здесь 0 почему !?

0
Kulbhushan Singh 17 Сен 2021 в 18:06

2 ответа

Лучший ответ

Вы не сохраняете значение максимальной суммы, вам нужно сделать это в цикле:

void printpair(int ar[], int n)
{
    int largestsum = INT_MIN, currentsum = 0;
    for (int i = 0; i < n; i++)
    {
        for (int j = i; j < n; j++)
        {
            currentsum = 0;
            largestsum = INT_MIN;
            for (int k = i; k <= j; k++)
            {
                std::cout << ar[k] << ",";
                currentsum += ar[k];
                largestsum = std::max(largestsum, currentsum);
            }
            std::cout << "\n";
        }
        std::cout << "the largest sum is " << largestsum << std::endl;
    }
}
1
anastaciu 17 Сен 2021 в 15:48

Вы устанавливаете

          largestsum = INT_MIN;

Во внутреннем цикле.

0
Sinan Ünür 17 Сен 2021 в 15:11