【杭电2199】Can you solve this equation?

来源:互联网 发布:加入淘宝要多少钱 编辑:程序博客网 时间:2024/06/06 09:32

这里写图片描述

这题卡精度,精确到小数点后第四位,所以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

0 0
原创粉丝点击