题目分析
这是一道有趣的解方程题。为了便于求解,设方程
f
(
x
)
=
a
x
3
+
b
x
2
+
c
x
+
d
=
0
f(x)=ax3+bx2+cx+d=0
f(x)=ax3+bx2+cx+d=0,设根的值域(-100至100之间)中有
x
x
x, 其左右两边相距
0.0005
0.0005
0.0005 的地方有
x
1
x1
x1 和
x
2
x2
x2
两个数,即
x
1
=
x
−
0.0005
x1=x-0.0005
x1=x−0.0005,
x
2
=
x
+
0.0005
x2=x+0.0005
x2=x+0.0005。只要
x
1
x1
x1 和
x
2
x2
x2 间的距离满足精度要求(精确到小数点后
2
2
2 位)。因此我们就可以使用暴力枚举。
AC代码
#include<bits/stdc++.h>
using namespace std;
double a,b,c,d;
int main() {
cin>>a>>b>>c>>d;
for(double i=-100;i<=100;i+=0.001){
double j=i+0.001;
double y1=a*i*i*i+b*i*i+c*i+d;
double y2=a*j*j*j+b*j*j+c*j+d;
if(y1*y2<=0){
cout<<fixed<<setprecision(2)<<i<<" ";
}
}
}