Project Euler第67题代码出错:结果偏大,请求排查修复
Project Euler第67题代码修复问题
我正在求解Project Euler第67题,此前解决第18题的代码无法正常运行,得到结果7320,而正确答案应为7273。我无法定位问题根源,希望了解需要修改代码的哪些部分以修复问题。
numbers =[ [59], #... ] sums = [ [59], #... ] # 单独处理前两行,因为主算法里搞不定这部分 i = 0 x = 1 for y in range(0, len(numbers[x])): for a in range(0, len(numbers[x - 1])): temp1 = numbers[i][a] + numbers[x][y] sums[x].append(temp1) print(sums) # 代码逻辑大致是把大三角形拆成小三角形,逐行累加求和 for x in range(1, len(sums) - 1): # bad数组用来存储两个三角形重叠时的较小和值 bad = [] # 计算小三角形的和,存入和数字数组尺寸相同的二维数组中 for y in range(0, len(sums[x])): temp1 = sums[x][y] + numbers[x + 1][y] sums[x + 1].append(temp1) temp1 = sums[x][y] + numbers[x + 1][y + 1] sums[x + 1].append(temp1) # 这里用bad数组处理重叠三角形,剔除较小的和值 for i in range(1, len(sums[x + 1]) - 2, 2): if sums[x + 1][i] >= sums[x + 1][i + 1]: a = sums[x + 1][i + 1] bad.append(a) if sums[x + 1][i + 1] > sums[x + 1][i]: a = sums[x + 1][i] bad.append(a) # 从最终数组中移除所有存入bad的较小和值 for y in range(0, len(bad)): for z in range(0, len(sums[x + 1]) - 1): if sums[x + 1][z] == bad[y]: sums[x + 1].pop(z) break # 到达三角形底部后,输出最大可能的和值 maximum = 0 for x in range(0, len(sums[-1])): if sums[-1][x] > maximum: maximum = sums[-1][x] print(maximum)
注:numbers和sums数组的完整内容较多,此处仅展示结构。
内容的提问来源于stack exchange,提问作者DSazykin
相关产品推荐
相关产品推荐

