在我的矩阵沙漏计算函数上返回一个0



我对这组代码有问题,我不知道为什么,所以这段代码的目的是获得矩阵中沙漏形的值。例如

1 1 1 0 0 0
0 1 0 0 0 0
1 1 1 0 0 0
0 0 2 4 4 0
0 0 0 2 0 0
0 0 1 2 4 0

这意味着从所有可能的沙漏中提取最高的数量,所以对于那些没有得到代码的人来说,这意味着以为例

1 1 1
1 
1 1 1

这是沙漏形状,它应该找到所有沙漏的最大值并输出,在这种情况下,最大值为19。但出于某种原因,当矩阵中的值为负数时,我的cout总是返回0而不是负数,我不明白为什么。如果有人能启发我就太好了。谢谢。

0 -4 -6 0 -7 -6
-1 -2 -6 -8 -3 -1
-8 -4 -2 -8 -8 -6
-3 -1 -2 -5 -7 -4
-3 -5 -3 -6 -6 -6
-3 -6 0 -8 -6 -7

负输入示例。

int main()
{
vector<vector<int>> arr(6);
for (int i = 0; i < 6; i++) {
arr[i].resize(6);
for (int j = 0; j < 6; j++) {
cin >> arr[i][j];
}
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
int maximumoutput = 0;
int temp = 0;
for(int r = 0; r < 4; r++){
for(int i = 0; i < 4; i ++){
for(int c = i; c < i+3; c++){
temp += arr[r][c];
temp += arr[r+2][c];
}
temp += arr[r+1][i+1];
maximumoutput = temp > maximumoutput ? temp : maximumoutput;
temp = 0;
}
}
cout << maximumoutput;
return 0;
}

这是因为您用0初始化了maximutput。所以你永远不会因为这个检查而得到任何低于0的值:

maximumoutput = temp > maximumoutput ? temp : maximumoutput;

要修复,您需要用最小可能值初始化最大输出

maximumoutput = std::numeric_limits<int>::min();

因为您将max初始化为0。。代码的结果应该是-19,并且小于0,这是最大的第一个值

你需要添加一个条件来检查你是否在这个矩阵的第一个

int main()
{
vector<vector<int>> arr(6);
for (int i = 0; i < 6; i++) {
arr[i].resize(6);
for (int j = 0; j < 6; j++) {
cin >> arr[i][j];
}
cin.ignore(numeric_limits<streamsize>::max(), 'n');
}
int maximumoutput = 0;
int temp = 0;
for(int r = 0; r < 4; r++){
for(int i = 0; i < 4; i ++){
for(int c = i; c < i+3; c++){
temp += arr[r][c];
temp += arr[r+2][c];
}
temp += arr[r+1][i+1];
// here edition 
if(r == 0 && i==0){
maximumoutput = temp;
}
maximumoutput = temp > maximumoutput ? temp : maximumoutput;
temp = 0;
}
}
cout << maximumoutput;
return 0;
}

最新更新