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 " ,Ans);
   }
   return 0;
}
         

原文地址:https://www.cnblogs.com/csnd/p/12062627.html