所以对于这个编码练习,我必须输入一些假想的块,它会告诉我金字塔高有多少完整的行。
因此,例如,如果我输入 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 许可协议
高度为
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