我需要编写一个程序,该程序接受整数的方阵并输出最大的子 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;
}
答案 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;
}