题意:
给你一个方程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;
}