题目链接:https://www.luogu.com.cn/problem/P1024
大意就是给出一个一元三次方程abcd,保证有三个解且解在-100 - 100之间
然后求出这三个解
这是一个二分的题,不过涉及到一些数学问题。
,,,如果将x代入后的两个方程表达式异号,说明中间有解。
根据这个性质,如果代入后的l和r的式子结果异号,那么有解。
如果满足性质,那么我们二分l 和 r
如果m和r异号,说明在右半边,否则在左半边。
code:
#include<bits/stdc++.h> using namespace std; double a,b,c,d; double js(double x){ return a*x*x*x+b*x*x+c*x+d; } int main() { cin>>a>>b>>c>>d; int sum =0; for(int i=-100;i<=100;i++){ double l=i,r=i+1; double x1 = js(l); double x2 = js(r); if(x1==0){ printf("%.2lf ",l); sum++; } if(x1*x2<0){ while(r-l>=0.001){ double m = (l+r)/2; if(js(m)*js(r)<=0) l=m; else r=m; } printf("%.2lf ",r); sum++; } if(sum==3) break; } }