Почему моя самая большая программа сумм суб-квадратных матриц не работает с маленькими матрицами с отрицательными числами? - PullRequest
0 голосов
/ 17 октября 2019

Эта программа предназначена для получения квадратной матрицы целых чисел и вывода наибольшей суммы субквадратной матрицы. Первая строка ввода представляет собой целое число, которое указывает размерность квадратной матрицы, за которой следует строка за строкой.

Моя программа работает почти идеально, за исключением того, что она не работает при использовании маленьких матриц с отрицательными значениями. Может кто-нибудь помочь мне оптимизировать код, я не вижу, где он идет не так

Пример ввода1: 3

1 2 3

4 5 6

7 8 9

Выход: 45

Пример Input2: 3

1 2 3

4 5 6

-7 -8-9

Вывод: 16 NB: Поскольку наибольшая квадратная матрица равна [2 3;5 6], что составляет 16

Мой код:

#include <iostream>
#include <algorithm>

using namespace std;

int main()

{
int  Numberofelements,n,counter = 0,sum=0,result = 0,Maximumvalue = -1, *pointervalue = NULL;

int count = 0;

cin>>n;

int mat[n][n];
int TempMatrix[n][n];


for (int i = 0; i < n; ++i)
{
    for (int j = 0; j < n; ++j)
    {
        cin>>mat[i][j];
        if(mat[i][j]<0){
            count++;
        }
    }
}


for (int i = 0; i < n; ++i)
{
    for (int j = 0; j< n; ++j)
    {
        sum = sum + mat[i][j];
    }
    if (sum > 0 )
    {
        counter++;
    }
    sum = 0;
}

Numberofelements = counter;





for (int j = 0; j < n; j++)
{
    sum = 0;
    for (int i = 0; i < Numberofelements; i++)
    {
        sum = sum + mat[i][j];
    }

    TempMatrix[0][j] = sum;

    for (int i=1; i<n-Numberofelements+1; i++)
    {
        sum = sum+(mat[i+Numberofelements-1][j] - mat[i-1][j]);

        TempMatrix[i][j] = sum;
    }
}



for (int i=0; i<n-Numberofelements+1; i++)

{
    sum = 0;

    for (int j = 0; j < Numberofelements; j++)
    {
        sum  = sum + TempMatrix[i][j];
    }

    if (sum > Maximumvalue)
    {
        Maximumvalue = sum;

        pointervalue = &(mat[i][0]);
    }

    for (int j = 1; j < n-Numberofelements+1; j++)
    {
        sum  = sum + (TempMatrix[i][j+Numberofelements-1] - TempMatrix[i][j-1]);

        if (sum > Maximumvalue)
        {
            Maximumvalue = sum;

            pointervalue = &(mat[i][j]);
        }
    }
}


for (int i = 0; i < Numberofelements; i++)
{
    for (int j = 0; j < Numberofelements; j++)
    {
        result+=*(pointervalue + i*n + j);
    }
}

cout << result;

return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...