欢迎光临散文网 会员登陆 & 注册

P1024 [NOIP2001 提高组] 一元三次方程求解

2023-03-20 13:52 作者:仓鼠翞  | 我要投稿

//重要;求解方程的根

//https://www.luogu.com.cn/problem/P1024?contestId=96614

#include<bits/stdc++.h>

using namespace std;

double a,b,c,d;


double f(double x)

{

return a*x*x*x+b*x*x+c*x+d;

}


int main()

{

cin>>a>>b>>c>>d;

//根的范围在-100到100之间,划分成三个区间二分?

//枚举-100到100内的每一个点x,(x-0.0005,x+0.0005)两个区间端点的值看是否异号是则说明x是艮

//或者是f(x)==0 则也是一个根

//暴力过一半

// for(int i=-100;i<=100;i++)

// {

// double x = i-0.000005;

// double y = i+0.000005;

// if(f(x)*f(y)<0||f(i)==0)

// {

// printf("%.2f ",(double)i);

// }

//

//二分

for(double i=-100;i<=100;i++)

{

//在每一个间隔一的区间里二分

double l=i;

double r=i+1;

if(f(l)==0)

{

printf("%.2f ",l);

continue;

}

if(f(l)*f(r)<0)

{

while(r-l>=1e-3)//设置精度信息0.0001是1e-3

{

double mid=(l+r)/2;

if(f(mid)*f(r)<=0)

{

//根在mid和r之间

l=mid;

}

else

{

//根在l和mid之间

r=mid;

}

}

printf("%.2f ",r);

}

}

return 0;

}


P1024 [NOIP2001 提高组] 一元三次方程求解的评论 (共 条)

分享到微博请遵守国家法律