二分查找------------hdu2199

这是我研究搜索的第一步,先从最基础的二分查找开始。

 

hdu2199这道题不难,但很让人头痛。就是一个数学题,简单的二分查找。我以前做过类似的题,但题目给的测试数据给人误导。如果你按照他给的数据得出1.6152.那你绝对会得到WA!!  流氓题,很让人气愤啊!      实际上结果应该是1.6151,这样才AC!

我的AC代码:(手打)

#include<stdio.h>

#include<math.h>

double f(double z)

{   

return 8.0*z*z*Z*z+7.0*Z*Z*Z+2.0*Z*Z+3.0*Z+6;

}

int main()

{

     double  y;    double  a,b,c,fz;          int t;

     scanf("%d",&t);

     while(t--)

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

             a=0;            b=100;

             if(f(a)>y||f(b)<y)    { printf("No solution!\n");  continue;}    //因为此题是单调的增的,所以可以这样判断,以后要具体问题具体分析。

            while(b-a>1e-6)      //精确度

             {       c=(a+b)/2;

                      fz=f(c);

                      if(fz>y)    b=c-1e-6;     //这个时候函数解在左半部分,减去1e-6可能是考虑到精度吧!我现在也不是很清晰

                      else          a=c+1e-6;   //这时候,解在右半部分。考虑到精度,要向中间靠拢。

              }

                c=(a+b)/2.0;     //这一布必须要有,

              printf("%.4lf",c);

      }

      return 0;

}

                     

    

 

 

 

 

 

posted on 2012-02-21 14:27  hrbust_09zhangyabin  阅读(218)  评论(0编辑  收藏  举报