首页 > 解决方案 > 计算 6 x 6 矩阵中每个沙漏的沙漏总和(其中条目只能从 0 到 9),然后打印最大沙漏总和

问题描述

这段代码有什么问题?

#include <bits/stdc++.h>
using namespace std;

int main()
{
    int a=0;int b=0;
    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');
    }
    for(int i=0;i<4;i++)
    {
        for(int j=0;j<4;j++)
        {
            a=arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2] 
[j+2];
        }
        if(a>b){
            b=a;
            a=0;
        }
        else{
            a=0;
        }
    }
    cout<<b;


    return 0;
}

此代码中不考虑最左下角的沙漏,它在所有其他部分都运行良好。你能告诉我这里的错误吗?

标签: c++

解决方案


此代码中不考虑最左下角的沙漏,它在所有其他部分都运行良好。

不,不仅不考虑最左下角的沙漏,而且除了每行的最后一个沙漏之外的所有沙漏都没有考虑。这是因为沙漏和a仅与b循环后的当前最大值进行比较,因此只考虑最后一个和。要更正此问题,您可以更改

        {
            a=arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2] 
[j+2];
        }
        if(a>b){
            b=a;
            a=0;
        }
        else{
            a=0;
        }

        {
            a=arr[i][j]+arr[i][j+1]+arr[i][j+2]+arr[i+1][j+1]+arr[i+2][j]+arr[i+2][j+1]+arr[i+2][j+2];
            if (a>b) b=a;
        }

推荐阅读