You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP初学者求助:如何计算可用砖块能搭建的金字塔层数

金字塔层数计算问题解决方案

需求说明

给定可用砖块数量,计算能搭建的金字塔层数:第1层用1块砖,第2层用2块,……第k层用k块,总砖块数为1+2+…+k,需找到最大的k使得总砖块数不超过给定数量。例如:

  • 6块砖:1+2+3=6,可搭建3层
  • 10块砖:1+2+3+4=10,可搭建4层

原代码的问题

  1. 逻辑错误:原代码仅单纯递增变量h直到等于砖块数,完全没有计算每层消耗的砖块,无法得到正确层数。
  2. 输入处理错误:readline(...) . PHP_EOL会把输入的数字转为带换行符的字符串,后续计算可能出现问题,需转为整数。

解决方案

方式一:循环累加(适合初学者理解)

通过逐步累加每层所需砖块,直到剩余砖块不足以搭建下一层:

<?php
// 获取输入并转为整数,兼容非数字输入
$blocks = (int)readline("Enter how many blocks are available for a pyramid?");
$layers = 0;
$totalUsed = 0;

// 检查是否能搭建下一层
while ($totalUsed + ($layers + 1) <= $blocks) {
    $layers++;
    $totalUsed += $layers;
}

echo "可搭建层数:$layers\n";
?>

方式二:数学公式法(高效简洁)

利用金字塔总砖块数的公式推导,直接计算最大层数:
总砖块数公式为 S = k(k+1)/2 ≤ 可用砖块数,解此不等式可得最大层数:

<?php
$blocks = (int)readline("Enter how many blocks are available for a pyramid?");
$layers = floor( (sqrt(8 * $blocks + 1) - 1) / 2 );
echo "可搭建层数:$layers\n";
?>

测试验证

  • 输入6:计算得(√(8*6+1)-1)/2 = (7-1)/2=3,输出3层
  • 输入10:(√(8*10+1)-1)/2=(9-1)/2=4,输出4层

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.14 22:50:29