在代码战中,有一个弹跳问题,它说:
“”一个孩子在一座高楼的第九层玩球,这层楼的高度是众所周知的。
他把球扔出窗外。这个球反弹(例如),达到其高度的三分之二(反弹0.66)。
他的母亲从离地面1.5米的窗户往外看。
母亲会多少次看到球在她的窗前传球(包括球下落和弹跳的时候)?
有效实验必须满足三个条件:仪表中的浮动参数" h“必须大于0,浮动参数”弹跳“必须大于0,而小于1的浮动参数”窗口“必须小于h。如果满足上述所有三个条件,则返回一个正整数,否则返回-1。
注意:只有当篮板球的高度严格大于窗口参数时,才能看到球。
示例:
问题并不难,在对数时间内通过下列方法解决:
def bouncingBall(h, bounce, window):
if h > 0 and window < h and bounce > 0 and bounce <1:
ct=1
while bounce*h > window:
ct += 2
h *= bounce
return ct
else:
return -1我的第一个冲动是在恒定的时间内解决这个问题,像这样:
def bouncingBall(h, bounce, window):
import math
return 2*int(math.log(window/h,bounce))+1 if h > 0 and window < h and bounce > 0 and bounce <1 else -1不工作,因为19次通过测试,3次没有通过测试。错误:"3应该等于1",2次;“退出代码”,1次。我以为这是个四舍五入的问题,但仍然没有解决办法。希望有人帮忙!
发布于 2021-05-05 15:48:31
实际上,这有点棘手,我是从测试输入中发现的。
在计算的时候,你假设如果球会弹到窗口,妈妈就能看见。我也这么想。但是在看了第一次测试用例(h=2,bounce=0.5,window=1,ans=1)之后,我明白了这个球需要比窗口更高才能让妈妈看到。所以加了0.001。

def bouncing_ball(h, bounce, window):
if h <= 0 or bounce <= 0 or bounce >= 1 or window >= h:
return -1
return int(math.log((window+0.001)/h, bounce)) * 2 + 1发布于 2020-10-31 15:21:53
def bouncingBall(h, bounce, window):
if not (h > 0 and (bounce > 0 and bounce < 1) and window < h):
return -1
else:
return 1 if h < window else 2 + bouncingBall((h * bounce), bounce, window)https://stackoverflow.com/questions/58905999
复制相似问题