Python实现Project Euler第11题结果错误,求排查代码问题
代码错误定位
- 错误1:垂直向上方向的边界判断逻辑完全错配
你计算向上连续四数乘积时,判断条件和实际访问的索引不匹配:
实际取数用的是行索引i-1、i-2、i-3,本该检查这些行索引是否大于等于0(即满足i >=3),但你错误地把列索引j-1、j-2、j-3的边界判断写进了条件里。
这会直接导致计算结果无效:行号小于3的位置本该越界无法计算,只要列号>=3就会触发逻辑,而Python的负列表索引会让你取到网格底部的行元素,根本不是向上的连续数;同时真正需要计算的行号>=3、列号<3的位置,反而会被错误的列边界判断卡住。 - 错误2:漏算一组斜向对角线方向
你目前仅计算了行号、列号同步增减的\型对角线(方向向量(1,1)和反向遍历的(-1,-1)),完全没有计算行号递增、列号递减的/型对角线(方向向量(1,-1))。题目给出的正确最大乘积70600674就出现在这个漏算的方向上,自然得不到正确结果。
修正操作:
- 把向上方向的判断条件从检查列边界改为直接判断
i >=3,匹配实际取数的行索引要求;- 补充/型对角线的计算逻辑:循环遍历每个(i,j)位置时,增加判断——若
i+3 <20且j-3 >=0,则计算grid[i][j] * grid[i+1][j-1] * grid[i+2][j-2] * grid[i+3][j-3]的乘积,和当前最大值比较更新。
内容的提问来源于stack exchange,提问作者wiknwo
相关产品推荐
相关产品推荐

