hdu5105给你一个方程,让你求极值(直接暴力)

题意:
      给你一个方程f[x] = abss(a * x * x * x + b * x * x + c * x + d);
然后给你各个参数还有x(-100<x<100)的取值范围,然后让你求极大值。


思路:
     一开始上来就来了个三分,结果一直wa,其实这个函数可以直接求导,用高中知识得到最值,关键是忘记怎么求了,其实还有一个更猥琐的方法,那就是直接暴力,题目要求是保留两位小数就行,而且x的范围不是很大,所以我们直接暴力x每次增加eps,我的eps=0.0001AC了,没试过再小点行不行,还有就是注意一点,最后别忘了算一下右边界,因为暴力的时候有可能错过右边界,这个地方没注意,WA了一次。




#include<stdio.h>


#define eps 0.0001


double abss(double x)
{
   return x > 0 ? x : -x;
}


double fun(double a ,double b ,double c ,double d ,double x)
{
    return abss(a * x * x * x + b * x * x + c * x + d);
}
    
double maxx(double x ,double y)
{
    return x > y ? x : y;
}


int main ()
{
   double a ,b ,c ,d ,l ,r;
   while(~scanf("%lf %lf %lf %lf %lf %lf" ,&a ,&b ,&c ,&d ,&l ,&r))
   {
      double Ans = 0;
      while(l <= r)
      {
         Ans = maxx(Ans ,fun(a ,b ,c ,d ,l));
         l += eps;
      }
      Ans = maxx(Ans ,fun(a ,b ,c ,d ,r));
      printf("%.2lf\n" ,Ans);
   }
   return 0;
}
         

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值