小白第一次发文章,有不足之处还请各位大佬指出哈哈哈
最开始写的时候还加了if hanshu(mid,a,b,c)==0的情况,结果死活求不出解,就在那里循环,后来才反应过来,如果还要判断这种情况,实际上就是要求自己找出精确解,但我只给mid精确到十位,这怎么可能呢
所以 删除掉这样一种情况,只判断下面mid的函数值大于0还是小于0即可
if hanshu(mid, a, b, c) > 0:
right = mid
else:
if hanshu(mid, a, b, c) < 0:
if abs(left-mid)<=0.0000000001:
return left
else:
left = mid
注意要加上边界条件,我计划最后解精确到10位,并且与真实解差值控制在0.0000000001以内,所以代码如下:
if abs(left-mid)<=0.0000000001:
return left
最后整体的代码是这样的~
class Solution:
def solve(self , a,b,c,left,right):
def hanshu(x, a, b, c):
return x * x * x + a * x * x + b * x - c
while left 0:
mid = round((left + right) / 2, 10)
if hanshu(mid, a, b, c) > 0:
right = mid
else:
if hanshu(mid, a, b, c) < 0:
if abs(left-mid)<=0.0000000001:
return left
else:
left = mid
else:
left = right
right = right + 100
so=Solution()
q=int(input())
left1 = 0
right1 = 100
ans=[]
for num in range(q):
a1,b1,c1=map(lambda x:int(x),input().split(' '))
ans.append(so.solve(a1,b1,c1,left1,right1))
for ele in ans:
print(ele)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)