hdu 2899(数学基础+二分)

时间:2021-08-30 19:39:52

题意:给了你一个函数,然后给了你x的变化范围,让你求出函数的最小值。

分析:它让你求的是函数的最小值,所以我们可以先对函数求导,得到的导数就可以判断函数的单调性了,求出导数后,我们发现如果函数的导数是x越大所求的的导数也就越大,

当导数一直为负数时,函数是单调递减的;当导数开始是负数,然后是正数,那说明函数开始时递减的然后是递增的,那么当导数为0时函数值肯定是最小的!我们求导数为0的

过程,我们可以用二分实现!

代码实现:

#include<stdio.h>
#include<string.h>
#include<math.h>
#define eps 1e-8 double g(double x)
{
return *pow(x,)+*pow(x,)+*pow(x,)+*x;
} double f(double x)
{
return *pow(x,)+*pow(x,)+*pow(x,)+*pow(x,);
} int main()
{
int T;
double y,l,r,mid;
scanf("%d",&T);
while(T--)
{
scanf("%lf",&y);
if(g(100.00)-y<=)
printf("%.4lf\n",f(100.00)-y*100.00);
else
{
l=;r=;
while(l+eps<=r)
{
mid=(l+r)/;
if(g(mid)-y<)
l=mid;
else if(g(mid)-y>)
r=mid;
else if(g(mid)-y<eps)
break;
}
printf("%.4lf\n",f(mid)-y*mid);
}
}
return ;
}