本文主要是介绍codeves天梯 解一元三次方程,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
有形如: ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数 (a , b , c , d 均为实数 ) ,并约定该方程存在三个不同实根 ( 根的范围在 -100 至 100 之间 ) ,且根与根之差的绝对值 >=1 。要求由小到大依次在同一行输出这三个实根 ( 根与根之间留有空格 ) ,并精确到小数点后 2 位。提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个 根。
分析:其实很暴力,就是用分治思想。将10000个数二分查找答案,数据不难,时间还是过得去==。值得注意的倒是精度问题(错了两次都是精度都被卡爆了,下面这种写法是比较推荐的保留小数,基本上不会出精度问题)
conste=1e-3;vara,b,c,d,l,r,m:extended;i,j:longint;function f(x:extended):extended; beginf:=a*x*x*x+b*x*x+c*x+d; end;beginreadln(a,b,c,d);for i:=-100 to 100 dobeginif f(i)*f(i-1)<0 thenbeginl:=i-1;r:=i;repeatm:=(l+r)/2;if f(m)*f(l)<0 thenr:=melseif f(m)=0 thenbeginl:=m;break;end elsel:=m;until abs(l-r)<e;write(l:0:2,' ');endelseif f(i)=0 thenwrite(i,'.00 ');end; end.
这篇关于codeves天梯 解一元三次方程的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!