题意就是求这个函数的
最大值。
对于三次函数的求大值,要使用求导,然后只要分类讨论。
对于数学题,来到大学的我确实变得很水了。这里就有对不起高中的老刘了。
#include<stdio.h>
#include<math.h>
double a,b,c,d;
double max;
void bijiao(double L)//传进来一个参数,保存当前函数的最大值。
{
double sum=a*L*L*L+b*L*L+c*L+d;
if(sum<0) sum=-sum;//绝对值的最大值
if(sum>max) max=sum;
}
int main()
{
double L,R;
while(scanf("%lf%lf%lf%lf%lf%lf",&a,&b,&c,&d,&L,&R)!=EOF)
{
double x1,x2,ss,i;
double a2,b2,c2;
max=-1;
double sum;
a2=3*a,b2=2*b,c2=c;
ss=4*a2*c2-b2*b2;
bijiao(L);
bijiao(R);
if(a==0&&b==0)//如果a=0,b=0.则证明这是一个单调函数
{
printf("%.2lf\n",max);
continue;
}
if(a==0&&b)//如果a=0,b!=0则表示这个一个2次函数。
{
x1=-c/(2.0*b);//这是2次函数的中点
if(x1<=R&&x1>=L) bijiao(x1);//如果这个中点在函数的区间中
}
else
{
if(ss>=0)//表示求导之后的2次函数有解,那么这两点一定是递增或者递减的一个峰值。
{
x1=(-b2+sqrt(ss))/(2*a2);
x2=(-b2-sqrt(ss))/(2*a2);
bijiao(x1);
bijiao(x2);}
}
printf("%.2lf\n",max);
}
return 0;
}