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

埃森哲编程题求助:反弹高度问题代码排查

反弹高度计算问题

题目描述

丹尼尔有一个球,需计算从初始高度H、以初始速度V落下的球经过N次反弹后的反弹高度H'。已知第N次反弹后的最终速度为Vₙ,需返回反弹高度的整数值。

注意:

  • 计算公式:H' = H × e^(2n),其中e为恢复系数,n为反弹次数
  • 恢复系数:e = V/Vₙ,V为初始速度,Vₙ为最终速度

问题场景

这是埃森哲编程笔试题目,我编写了如下Python代码,但仅通过2个测试用例。尝试过取整、除零处理、切换数据类型等操作仍未解决,不清楚是代码还是题目问题。

def fun(in1, in2, in3):
    #int in1 - initial height
    #int in2 - initial velocity
    #int in3 - final velocity
    # this was given in the coding area

    e = in2//in3
    new_e = e**2
    return in1*new_e

代码问题分析与修正

核心错误点

  1. 整数除法丢失精度:用//做整数除法会直接丢弃小数部分,但恢复系数e是浮点比值,必须用/计算,否则结果会严重偏离真实值。
  2. 公式逻辑缺失:题目公式需要用到反弹次数n,但代码完全没处理这个参数。结合函数仅有的三个输入(H、V、Vₙ),推测题目可能存在笔误——合理的物理逻辑是恢复系数e = Vₙ/V(反弹后速度与反弹前速度的比值),此时可推导出H' = H × (Vₙ/V)²,无需额外输入n。
  3. 未处理边界情况:当最终速度in3为0时会触发除零错误,需要提前判断。
  4. 未按要求返回整数:计算结果需转为整数,需明确取整规则(截断或四舍五入)。

修正后的代码(符合物理逻辑与输入参数)

def fun(in1, in2, in3):
    # int in1 - 初始高度
    # int in2 - 初始速度
    # int in3 - 最终速度
    if in3 == 0:
        return 0  # 处理除零场景,可根据题目要求调整返回值
    
    # 按修正后的物理逻辑计算,对应题目公式的简化结果
    speed_ratio = in3 / in2
    final_height = in1 * (speed_ratio ** 2)
    # 返回整数值,这里用int()截断小数部分,若题目要求四舍五入可换round()
    return int(final_height)

严格遵循题目给定公式的版本(需补充n参数)

如果必须完全按照题目给出的公式计算,函数需要额外输入反弹次数n,代码如下:

def fun(in1, in2, in3, n):
    # in1:初始高度, in2:初始速度, in3:最终速度, n:反弹次数
    if in3 == 0:
        return 0
    
    e = in2 / in3
    final_height = in1 * (e ** (2 * n))
    return int(final_height)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 15:07:32