这题是以水题,开始被他唬了,后来听唐聪一说又是以单调,这个函数的倒数在0-100内事单调递增的,如果Y小于0,在0时导数值是大于0的,显然这是函数一直是递增的,所以最小值在0处产生,当Y大于0,求出X使得导数值等于0(二分),此时函数取得最小值,所以又是一水题啊
#include<iostream>
#include<cmath>
#include<cstdlib>
using namespace std;
double x,y,z;
inline double fax( double x )
{
return 6 * pow( x, 7 ) + 8 * pow( x,6 ) + 7 * pow( x,3 ) + 5 * x * x - y * x;
}
inline double mini( double x )
{
return 42 * pow( x,6 )+ 48 * pow( x,5 ) + 21 * x * x + 10 * x - y ;
}
int main( )
{
int t;
scanf( "%d",&t );
while( t-- )
{
double min;
cin>>y;
if( y <= 0 )
min = 0;
else
{
double a = 0,b = 100,mid = 50;
double e1 = mini( a ),e2 = mini( mid ),e3 = mini( b );
while( fabs( e1 - e3 ) > 0.0001 )
{
if( e1 * e2 < 0 )
{
b = mid;
e3 = e2;
mid = ( a + b ) / 2;
e2 = mini( mid );
}
else
{
a = mid;
e1 = e2;
mid = ( a + b ) / 2;
e2 = mini( mid );
}
min = mid;
}
}
printf( "%.4lf\n",fax( min ) );
}
return 0;
}