You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Python金字塔高度计算脚本:输入0块砖时高度计算错误的修复咨询

修复金字塔高度计算脚本的方案

嘿,我来帮你解决这个砖块计算金字塔高度的问题~首先咱们先理清楚原代码里的几个问题,再给出两种可行的修复方案。

原代码的核心问题

  1. 判断公式错误:你用了 (n*n)/2 来判断,但实际上高度为 h 的金字塔需要的总砖块数是 1+2+3+...+h = h*(h+1)/2(每层依次需要1、2、3…块砖),原公式不符合这个逻辑。
  2. 变量未初始化:如果输入0块砖,range(bricks) 是空循环,height 变量根本没被赋值,这时候会触发语法错误;而你之前的+1导致输入0时错误输出1,就是因为循环没执行但可能height被默认初始成了1?
  3. 循环逻辑偏差:循环里直接把n+1赋值给height,没有累计判断总砖块数是否符合,导致结果不准确。

修复方案1:循环累加式(直观易懂)

这种方式一步步模拟搭建金字塔的过程,适合理解逻辑:

# 先获取用户输入的砖块数
bricks = int(input("请输入砖块数量:"))
height = 0
total_bricks_used = 0

# 每次尝试加一层,检查是否有足够砖块
while total_bricks_used + (height + 1) <= bricks:
    height += 1
    total_bricks_used += height  # 累加当前层需要的砖块数

print("The height of the pyramid is:", height)
  • 输入0时:循环条件不满足,height保持0,输出正确。
  • 输入1时:total_bricks_used +1 =1 <=1height变为1,输出正确。
  • 输入3时:可以搭2层(1+2=3块),输出2,符合预期。

修复方案2:数学公式法(高效简洁)

利用二次方程求解直接算出最大高度,不需要循环,适合大数值场景:

import math

bricks = int(input("请输入砖块数量:"))
# 处理负数输入(虽然用户可能不会输入,但做个容错)
if bricks < 0:
    height = 0
else:
    # 推导公式:h² + h - 2*bricks ≤0,求最大整数h
    height = int((math.sqrt(1 + 8 * bricks) - 1) // 2)

print("The height of the pyramid is:", height)
  • 输入0时:sqrt(1+0)=1(1-1)//2=0,输出0。
  • 输入1时:sqrt(9)=3(3-1)//2=1,输出1。
  • 输入6时:sqrt(49)=7(7-1)//2=3,对应3层(1+2+3=6块),正确。

这两种方案都能完美解决你遇到的问题,选哪种看你更倾向于直观理解还是高效计算啦~

内容的提问来源于stack exchange,提问作者Kaib3r

火山引擎 最新活动