【杭电2199】Can you solve this equation?
这题卡精度,精确到小数点后第四位,所以while()条件用<1e-5作为限制,不能受整数二分方法的限制,重要的是二分思想,本题只要让r或l直接等于mid即可,因为浮点型除以2后不存在约数是个确定的值,不符合while()条件就跳出输出mid,简洁明了。
还有其他的二分方法,不过这个理解起来最为简单,我也是借鉴别人的代码综合而来的,却是是受益匪浅。
#include<stdio.h>
#include<math.h>
double judge(double mid) {
return 8*pow(mid,4.0)+7*pow(mid,3.0)+2*pow(mid,2.0)+3*mid+6;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
double y;
scanf("%lf",&y);
if(y<judge(0.0)||y>judge(100.0)) {
printf("No solution!\n");
continue;
}
double l=0,r=100;
double mid;
while(fabs(judge(mid)-y)>1e-5) {
mid=(l+r)/2;
if(judge(mid)>y)
r=mid;
else if(judge(mid)<y)
l=mid;
}
printf("%.4lf\n",mid);
}
return 0;
}
http://acm.hdu.edu.cn/showproblem.php?pid=2199
还没有评论,来说两句吧...