http://wikioi.com/problem/1038/
提示:记方程f(x)=0,若存在2个数x1和x2,且x1<x2,f(x1)*f(x2)<0,则在(x1,x2)之间一定有一个 根。
题目给了方法,正统二分(交了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);
}
}