P1024 一元三次方程求解

题目描述
有形如:
ax3+bx2+cx1+dx0=0ax^3+bx^2+cx^1+dx^0=0
这样的一个一元三次方程。给出该方程中各项的系数(
a,b,c,da,b,c,d
a,b,c,d均为实数),并约定该方程存在三个不同实根(根的范围在
−100-100
−100至
100100
100之间),且根与根之差的绝对值
≥1 \ge 1
≥1。要求由小到大依次在同一行输出这三个实根(根与根之间留有空格),并精确到小数点后
22
2位。
提示:记方程
f(x)=0f(x)=0
f(x)=0,若存在2个数

f(x1)×f(x2)<0f(x_1) \times f(x_2)<0
f(x)×f(x)<0,则在
(x1,x2)(x_1,x_2)(x,x)之间一定有一个根。
输入输出格式
输入格式:

一行,
4个实数
A,B,C,DA,B,C,D
A,B,C,D。

输出格式:

一行,
3个实根,并精确到小数点后2位。

看到dalao们都是用二分,其实可以直接枚举解。

var i,j,k:longint;
    m,n:longint;
    a,b,c,d:real;
    x,y:real;
begin
  read(a,b,c,d);
  for i:=-100000 to 100000 do 
  begin
  x:=i/1000; //解
  if abs(a*x*x*x+b*x*x+c*x+d)<0.0001 {判断误差} then write(x:0:2,' ');//当为解时输出
  end;
end.

猜你喜欢

转载自blog.csdn.net/sxy__orz/article/details/82559943