遍历寻找or数学公式 | HJ107 求解立方根

# 最优解1
# 牛顿迭代法求解立方根的思路:
#      令f(x) = x^3 - a,求解f(x) = x^3 - a = 0。
# 利用泰勒公式展开,即f(x)在x0处的函数值为:
#      f(x) = f(x0) +f'(x0)(x-x0) = (x0^3-a) + (3x0^2)(x-x0) = 0,
#      解之得:x = x0 - (x0^3 - a)/(3x0^2)。
#      即 新x = 旧x - (f(x)-a)/f'(x)
n= float(input())
x=1
while abs(x**3-n)>1e-7:
    x=x-(x**3-n)/(3*x**2)
print(round(x,1))

# 最优解2
while True:
    try:
        a = float(input().strip())
        epsilon = 0.0001
        low = min(-1.0, a)
        high = max(1.0, a)
        ans = (low + high)/2
        while abs(ans**3 - a) >= epsilon:
            if ans**3 < a:
                low = ans
            else:
                high = ans
            ans = (low + high)/2.0
        print('%.1f' % ans)
    except:
        break
		

# 我的代码
def func(num, neg):
    gen = 0
    tmp = 0
    dis = float('inf')
    num = (-1)*num if neg else num
    not_found = True
    while not_found:
        if abs(gen**3-num) < dis:
            dis = abs(gen**3-num)
            tmp = gen
        else:
            not_found = False
            break    
        gen += 0.1
    tmp = (-1)*tmp if neg else tmp
    print(round(tmp, 1))

while True:
    try:
        num = float(input())
        func(num, num<0)
    except:
        break


华为笔试刷题 文章被收录于专栏

高质量题: 1~40:HJ16,HJ22,HJ24,HJ26,HJ27,HJ28,HJ35,HJ37,HJ39; 40~80:HJ41,HJ42,HJ43,HJ44,HJ48,HJ50,HJ52,HJ53,HJ57,HJ61,HJ63,HJ64,HJ70,HJ71,HJ74,HJ77; 80~108:HJ82,HJ85,HJ88,HJ89,HJ93,HJ95,HJ98,HJ103,HJ107

全部评论

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务