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

类Pascal三角的砖块压力计算及金字塔打印问题求助

砖块金字塔问题解决

一、修复金字塔打印代码

你原代码逻辑错误,无法正确输出金字塔结构。以下是可打印居中对齐金字塔的代码,每层标注砖块在当前层的位置编号:

# 打印10层居中对齐的砖块金字塔
total_layers = 10
for layer in range(1, total_layers + 1):
    # 前置空格实现居中效果
    prefix_spaces = " " * (total_layers - layer)
    # 生成当前层的砖块位置标签
    block_labels = [str(pos) for pos in range(1, layer + 1)]
    print(prefix_spaces + " ".join(block_labels))

运行后会输出层级分明的金字塔,每层数字代表砖块从左到右的位置(从1开始计数)。

二、实现上方压力计算函数

这个问题的压力传递规则和帕斯卡三角高度相关:每块砖会将自身重量(1)加上上方承受的压力,平均分配给下方相邻的两块砖(边缘砖仅分配给下方一块)。我们需要计算的是目标砖块上方所有砖块传递下来的总压力,提供两种实现方式:

方法1:递推法(直观易懂)

逐层计算每块砖的压力,适合层数较少的场景:

def calculate_pressure(target_layer, target_pos):
    # 参数说明:target_layer为目标砖块所在层数(从1开始),target_pos为砖块在层内的位置(从1开始)
    if target_layer == 1:
        return 0.0  # 顶部砖块无上方压力
    
    # 初始化第一层的压力列表(仅1块砖,压力为0)
    prev_layer = [0.0]
    
    for layer in range(2, target_layer + 1):
        current_layer = []
        for pos in range(1, layer + 1):
            if pos == 1:
                # 左侧边缘砖,仅接收上一层最左砖的总重量(自身重量+压力)的一半
                pressure = (prev_layer[0] + 1) / 2
            elif pos == layer:
                # 右侧边缘砖,仅接收上一层最右砖的总重量的一半
                pressure = (prev_layer[-1] + 1) / 2
            else:
                # 中间砖,接收上一层左右两块砖总重量的一半之和
                pressure = (prev_layer[pos-2] + 1)/2 + (prev_layer[pos-1] + 1)/2
            current_layer.append(pressure)
        prev_layer = current_layer
    
    return prev_layer[target_pos - 1]

方法2:组合数公式法(高效计算)

通过数学公式直接计算,无需逐层递推,适合层数较多的场景。
推导后的公式:对于第n层第i块砖(1≤i≤n),上方承受的压力为:
$$\text{pressure}(n,i) = \frac{(n-1) \times C(n-1, i-1) - (2^{n-1} - C(n-1, i-1))}{2^{n-1}}$$
其中$C(a,b)$为组合数(从a个元素中选b个的组合数)。

Python实现代码:

import math

def calculate_pressure_formula(target_layer, target_pos):
    if target_layer == 1:
        return 0.0
    n = target_layer
    i = target_pos
    comb = math.comb(n-1, i-1)
    numerator = (n-1)*comb - (2**(n-1) - comb)
    denominator = 2**(n-1)
    return numerator / denominator

验证示例

  • 第2层第1块砖:calculate_pressure(2,1) 返回0.5,符合预期
  • 第3层第2块砖:calculate_pressure(3,2) 返回1.0,与参考图一致
  • 第4层第2块砖:calculate_pressure(4,2) 返回0.75,与参考图一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 17:47:06