我需要我的子正方形矩阵和程序来输出最大正方形的和,但它正在查找最大矩形的和。

时间:2019-10-15 20:27:23

标签: c++ matrix

我需要编写一个程序,该程序接受整数的方阵并输出最大的子 SQUARE -矩阵和。输入的第一行是一个整数,它表示方矩阵的尺寸(n * n),然后是逐行的实际矩阵。

我有一个正在运行的程序,它输出矩形的最大和而不是所需的正方形。

示例输入:

3

1 2 3

4 5 6

-7 -8 -9

输出: 应该是16(2 + 3 + 5 + 6),但是输出21(1 + 2 + 3 + 4 + 5 + 6)

如您所见,它需要矩形的总和,但是我需要它来找到一个正方形

这是我的代码:

    #include <iostream>

    using namespace std;

    int main()

    {
int n;
int mat[100][100];
cin >> n;

int sum = 0;
int maxSum = 0;

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

for (int k = 0; k<n; k++)
{
    for (int l = 0; l<n; l++)
    {
        sum = sum + mat[k][l];

        if (sum < 0)
        {
            sum = 0;
        }
        if (sum > maxSum)
        {
            maxSum = sum;

    }
}
}

cout << maxSum;

return 0;
    }

1 个答案:

答案 0 :(得分:0)

您的循环很近。但是,如果您要查找的话,则必须对每次迭代的平方求和。在这里,我将假设一个输入并从那里开始。

编辑:因此求和更加清晰。

#include <iostream>
#include <vector>

int main()
{
    //initalize(using std::cin here) You can size then load the vectors
    std::vector<std::vector<int>> mat = { {1,2,3},{4,5,6},{-7,-8,-9,} };

    // then do the work...
    int max = std::numeric_limits<int>::min();
    //assuming 'square' is 2x2, adjust 'size()-1` if not
    for (size_t i = 0; i < mat.size() - 1; ++i)
        for( size_t j = 0; j < mat.at(0).size() - 1; ++j)
        {
            int sum =
                 mat[i][j] +
                 mat[i][j+1] +
                 mat[i+1][j] +
                 mat[i+1][j+1];

            if (sum > max)
                max = sum;
        }
    std::cout << max << std::endl;
}