小白月赛25 G解方程

G

在这里插入图片描述

这题硬要解方程好像也可以,但是代码不好实现,然后据说还有一种做法是牛顿迭代的公式,在类似循环找答案。
思路:

用二分查找,首先先带特殊值,1,然后会发现这个答案最小就是1,左边是递增数列,基于此可以知道1<=x<=c,然后既然确定了答案范围就可以用二分去做(因为是求解,算出来是小事,不是整数)
(不知道为什么小于c就多带特殊值)
这么一看好像挺简单对不对,但是单纯直接二分超时,然后我就在想为什么。。。。

看他们都是有限制条件的,但是这个条件这么来的呢?
然后我就试,发现当二分到一定次数的时候,mid(就是 (i+j)/2的那个数,)会变得一样,大致一样,区别在小数点好后面,又恰好这题设置了小数范围,直接带极限进去,发现到100次以后数都一样了,不够现在想想,二分100次,这个数要多大
(二分100次应该还可以再缩小)

再就是判断条件,就是精度问题,key是求解,不肯完全相等

import math
a,b,c=map(int,input().split())
key=t1=t=0
t2=c

while True:
    if t>100:
        break
    mid=(t1+t2)/2
    key=mid**a+b*math.log(mid)
    if abs(key-c)<0.00000001:
        break
    if key>c:
        t2=mid
    else:
        t1=mid
    t+=1
print('{:.8f}'.format(mid))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值