传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5105
给一个三次函数以及一个区间,求在该区间上三次函数的绝对值最大是多少
最简单的情况a=0且b=0,则直接求两端点值并比较
a=0而b!=0时,求两端点值,并且求导。。。
a!=0是求导。。。没了
反正就是高中数学的知识啦啦啦
代码如下:
#include<cstdio>
#include<cmath>
using namespace std;
double a,b,c,d;
double L,R;
double ans;
double A,B,C;
double x1,x2;
double ABS(double x)
{
if (x>=0)
{
return x;
}
return -x;
}
double MAX(double x,double y)
{
if (x>y)
{
return x;
}
return y;
}
double fx3(double x)
{
return ABS(a*x*x*x+b*x*x+c*x+d);
}
int main()
{
while (scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&L,&R)!=EOF)
{
if (a==0)
{
if (b==0)
{
ans=MAX(fx3(L),fx3(R));
}
else
{
ans=MAX(fx3(L),fx3(R));
if (-c/(2*b)>=L && -c/(2*b)<=R)
{
ans=MAX(ans,fx3(-c/(2*b)));
}
}
}
else
{
A=3*a;
B=2*b;
C=c;
ans=MAX(fx3(L),fx3(R));
if (B*B-4*A*C>0)
{
double t=B*B-4*A*C;
t=sqrt(t);
x1=(-B+t)/(2*A);
x2=(-B-t)/(2*A);
if (x1>=L && x1<=R)
{
ans=MAX(ans,fx3(x1));
}
if (x2>=L && x1<=R)
{
ans=MAX(ans,fx3(x2));
}
}
}
printf("%0.2lf\n",ans);
}
return 0;
}