埃森哲编程题求助:反弹高度问题代码排查
反弹高度计算问题
题目描述
丹尼尔有一个球,需计算从初始高度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
代码问题分析与修正
核心错误点
- 整数除法丢失精度:用
//做整数除法会直接丢弃小数部分,但恢复系数e是浮点比值,必须用/计算,否则结果会严重偏离真实值。 - 公式逻辑缺失:题目公式需要用到反弹次数
n,但代码完全没处理这个参数。结合函数仅有的三个输入(H、V、Vₙ),推测题目可能存在笔误——合理的物理逻辑是恢复系数e = Vₙ/V(反弹后速度与反弹前速度的比值),此时可推导出H' = H × (Vₙ/V)²,无需额外输入n。 - 未处理边界情况:当最终速度
in3为0时会触发除零错误,需要提前判断。 - 未按要求返回整数:计算结果需转为整数,需明确取整规则(截断或四舍五入)。
修正后的代码(符合物理逻辑与输入参数)
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
相关产品推荐
相关产品推荐

