1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > [洛谷P1024]python一元三次方程求解

[洛谷P1024]python一元三次方程求解

时间:2023-06-01 00:49:58

相关推荐

[洛谷P1024]python一元三次方程求解

[洛谷P1024]python一元三次方程求解

首先将方程幂次形式转换为乘积形式(可节省代码运行时间)

其次使用零点定理F(x1)∗F(x2)<0F({x}_1)*F({x}_2)<0F(x1​)∗F(x2​)<0则必有一根,取m=(x1+x2)/2m = ({x}_1+{x}_2)/2m=(x1​+x2​)/2每次判断区间的一半内是否有根,也可以节约代码运行时间。

cnt 为计数器若收到三个根即可退出循环。

此题精度只需达到小数点两位即可 AC 故我们以小数点后三位为步长取值。

代码如下

n = input().split() cnt = 0def func(x,n):a,b,c,d = eval(n[0]),eval(n[1]),eval(n[2]),eval(n[3])return (((a*x+b)*x)+c)*x+dfor i in range(-100,100):l = ir = i+1x1 = func(i,n)x2 = func(i+1,n)if x1 == 0:print("{:.2f}".format(l),end=" ")cnt += 1if x1*x2<0 :#大前提:左边和右边都不为0while (r-l) >= 0.001:#精度为两位小数故取三位小数可以夹逼至(l、r)最相近就可以近似的看作l==r;故只打印rm = (l+r)/2if func(m,n)*func(r,n) <= 0:l = melse:r = mprint("{:.2f}".format(r),end=" ")cnt += 1if cnt == 3:break

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。