这题硬要解方程好像也可以,但是代码不好实现,然后据说还有一种做法是牛顿迭代的公式,在类似循环找答案。
思路:
用二分查找,首先先带特殊值,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))