HDU-5105 Math Problem

题意就是求这个函数的

最大值。

对于三次函数的求大值,要使用求导,然后只要分类讨论。

对于数学题,来到大学的我确实变得很水了。这里就有对不起高中的老刘了。


#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;
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值