codeves天梯 解一元三次方程
2017-02-08 19:27
211 查看
有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程。给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至1
4000
00之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。
提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个
根。
分析:其实很暴力,就是用分治思想。将10000个数二分查找答案,数据不难,时间还是过得去==。值得注意的倒是精度问题(错了两次都是精度都被卡爆了,下面这种写法是比较推荐的保留小数,基本上不会出精度问题)
4000
00之间),且根与根之差的绝对值>=1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后2位。
提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个
根。
分析:其实很暴力,就是用分治思想。将10000个数二分查找答案,数据不难,时间还是过得去==。值得注意的倒是精度问题(错了两次都是精度都被卡爆了,下面这种写法是比较推荐的保留小数,基本上不会出精度问题)
const e=1e-3; var a,b,c,d,l,r,m:extended; i,j:longint; function f(x:extended):extended; begin f:=a*x*x*x+b*x*x+c*x+d; end; begin readln(a,b,c,d); for i:=-100 to 100 do begin if f(i)*f(i-1)<0 then begin l:=i-1; r:=i; repeat m:=(l+r)/2; if f(m)*f(l)<0 then r:=m else if f(m)=0 then begin l:=m; break; end else l:=m; until abs(l-r)<e; write(l:0:2,' '); end else if f(i)=0 then write(i,'.00 '); end; end.
相关文章推荐
- 用弦截法求一元三次方程的根
- GDUFS1151 General Problem 解一元三次方程
- hdu5105(求一元三次方程的最值)
- nyoj 1178 && hdu 5105 Math Problem 求解一元二次三次方程
- 三分求一元三次方程的极值:hdu 4355
- 弦截法求一元三次方程的近似解
- 一元三次和四次方程的解
- 【2031】求一元三次方程的解
- zstu2462 求一元三次方程的根
- EXCEL 单变量求解 解一元三次方程
- 第七周oj求一元二次方程的根
- 三次一元方程组 基本粒子群算法
- C 求一元二次方程跟
- 第三章数程序设计初步--分支结构项目5求一元二次方程的根
- 求一元二次方程的根,计算运费问题,计算个人所得税问题
- 编程求一元二次方程。ax²+bx+c=0(a≠0)
- 输入系数求一元二次方程根;输入数字对应打开windows的记事本、画图、计算器;输出当前一个月每天是星期几
- 二分法求三次方程的根
- 求一元二次方程的解
- [置顶] 求一元二次方程的解: