好吧,这道题思路还是比较简单的。整个程序大体上很快就打出来了,然后修改了解为整数的情况。
但是交上去一直是50分,最后我很无耻的看了题解,然后抄了一个玄学if回来,瞬间AC,不知道为什么。。。
这句就是玄学:
if(f(i)*f(i+)<)
好吧,下面来看AC代码(本题还可以用2*暴力来做,也很naive)
#include <cstdio>
#include <iostream>
using namespace std;
double a,b,c,d;
double f(double x)
{
return a*x*x*x+b*x*x+c*x+d;
}
void tw(double l,double r)
{
if(r-l<=0.005)
{
printf("%.2f ",l);
return;
}
double mid=(l+r)/2.0;
double ll=f(l);
double rr=f(r);
if(ll==)
{
printf("%.2f ",l);
return;
}
if(rr==)
{
printf("%.2f ",r);
return ;
}
if(ll*rr>) return;
double m=f(mid);
if(m==)
{
printf("%.2f ",mid);
return;
}
if(m*ll<) tw(l,mid);
else tw(mid,r);
return;
} int main()
{
cin>>a>>b>>c>>d;
for(double i=-101.0;i<=100.1;i++)
{ if(f(i)==0.00)
{
printf("%.2f ",i);
}
if(f(i)*f(i+)<) tw(i,i+);
}
return ;
}
可以发现二分很冗杂...可以改进。