c++ - 计算 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;
}
此代码中不考虑最左下角的沙漏,它在所有其他部分都运行良好。你能告诉我这里的错误吗?
解决方案
此代码中不考虑最左下角的沙漏,它在所有其他部分都运行良好。
不,不仅不考虑最左下角的沙漏,而且除了每行的最后一个沙漏之外的所有沙漏都没有考虑。这是因为沙漏和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;
}
推荐阅读
- html - 网络表单应用程序
- .net - 集成测试:Microsoft.Owin.Selfhost 与 Microsoft.AspNet.TestHost(或 Selenium)?
- sql-server - 将生成的列添加到 SQL 查询结果的末尾
- python - 使用 Beautiful soup 在 HTML 表格中查找信息
- asp.net - 如何在 ASP.net Code.behind 中添加文本框列
- java - 多线程 Java 服务器,套接字异常错误
- android - 私有 IP 上的自签名 SSL 证书在 Chrome 中无效
- python - 基于字符串的Python类型转换
- assembly - 使用汇编读取输入(16 位引导加载程序)
- jsoup - Jsoup:从参展商列表中提取地址并存储在excel文件中