输出金字塔的高度

新手上路,请多包涵

所以对于这个编码练习,我必须输入一些假想的块,它会告诉我金字塔高有多少完整的行。

因此,例如,如果我输入 6 个块…我希望它告诉我金字塔的高度为 3。(底部 3 个块,上面 2 个,上面 1 个)。

在我的脑海里,我觉得这会像斐波那契金字塔一样工作,所以我的代码以此为基础。

 blocks = int(input("Enter number of blocks: "))

for i in range(blocks + 1):
    for j in range(blocks + 1):
    height = j / 2
if height % 2 == 0:
    height = height / 2

print(f"The height of the pyramid: {height}")

这就是我到目前为止所拥有的…如果我执行数字 6 或类似 20 的操作,但显然如果我执行类似 1000 的操作,它不会给我想要的结果。我觉得我的代码离我很远。

原文由 Tlat 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 939
2 个回答

高度为 N 的金字塔有 1 + 2 + … + N 块。这减少到 N * (N + 1) / 2 。因此,您需要找到 (N^2 + N) / 2 小于或等于您选择的数字 blocks 形式的最大整数。二次方程相当简单: N^2 + N - 2 * blocks = 0 ,根位于 N = floor((-1 +/- sqrt(1 + 8 * blocks)) / 2) 。由于 blocks 是一个正整数,负根永远不会适用于您的情况。您可以使用 int **0.5 floor sqrt

 blocks = int(input("Enter number of blocks: "))
print(f'You can build a pyramid {int(0.5 * ((8 * blocks + 1)**0.5 - 1))} blocks high')

原文由 Mad Physicist 发布,翻译遵循 CC BY-SA 4.0 许可协议

blocks = int(input("Enter the number of blocks: "))

height = 0

inlayer = 1

while inlayer <= blocks:

    height += 1
    blocks -= inlayer
    inlayer += 1

print("The height of the pyramid: ", height)

原文由 LocoCharles 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题