二分查找------------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;
}