HDU2899 (二分)

题意:由题意给出的函数,求出最小值的x

方法一

先求导,导数等于0的位置就是F(x)最小的位置

( 仅限此题)

View Code
 1 #include<stdio.h>

 2 #include<math.h>

 3 

 4 double func( double x,double y ){

 5     double ans;

 6     ans=42.0*pow( x,6.0 )+48.0*pow( x,5.0 )+21.0*x*x+10.0*x-y;

 7     return ans;

 8 }

 9 

10 double func2( double x,double y ){

11     double ans;

12     ans=6.0*pow(x,7.0)+8.0*pow(x,6.0)+7.0*pow(x,3.0)+5.0*pow(x,2.0)-y*x;

13     return ans;

14 }

15 

16 int main(){

17     int T;

18     scanf("%d",&T);

19     while( T-- ){

20         double y;

21         scanf("%lf",&y);

22         double left,right,mid;

23         left=0,right=100.0;

24         double delta=1e-8;

25         while( left<right ){

26             mid=( left+right )/2.0;

27             double temp;

28             temp=func( mid,y );

29             if( temp==0 ) break;

30             if( temp>0 ) right=mid-delta;

31             else left=mid+delta;

32         }

33         printf("%.4lf\n",func2( mid,y ));

34     }

35     return 0;

36 }

 

你可能感兴趣的:(HDU)