wikioi 1038 一元三次方程求解

来源:互联网 发布:qq空间域名申请 编辑:程序博客网 时间:2024/06/05 09:49

http://wikioi.com/problem/1038/

提示:记方程f(x)=0,若存在2个数x1x2,且x1<x2f(x1)*f(x2)<0,则在(x1x2)之间一定有一个 根。

题目给了方法,正统二分(交了7次,二分真tm难)

void find(double bit,double top,bool f1,bool f2){if(top-bit<0.01) {printf("%.2lf ",top);return;}double x=(bit+top)/2;double y=(a*x*x*x+b*x*x+c*x+d);bool f;if(y>0) f=true;else f=false;if(f!=f1) find(bit,x,f1,f);if(f!=f2) find(x,top,f,f2);}

自己的还是暴力吧

#include<cstdio>#include<cstring>#include<iostream>#include<algorithm>using namespace std;double a,b,c,d;double x[10];int xl=1;double l,r;double f(double x){double fz;fz=a*x*x*x+b*x*x+c*x+d;return fz;}int main(){cin>>a>>b>>c>>d;for(double i=-100.000;i<=100.000;i=i+0.001)//暴力枚举了0.0{        if(f(i)*f(i+0.001)<=0)printf("%.2lf ",i);}}


原创粉丝点击