HDU_2199_CanYouSolveThisEquation

来源:互联网 发布:java调用方式 编辑:程序博客网 时间:2024/06/14 04:06

二分法求方程的根。

注意函数在0-100单调递增因此最开始想的有点多。

#include <iostream>#include<stdio.h>using namespace std;typedef double LD;const LD AC=1e-6;  //保留4位要多一些LD f(LD x){    return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;}LD bs(LD y){    LD lo=0,hi=100.0;    LD mid;    while(hi-lo>AC)         //查找的跳出条件变化了    {        mid=lo+(hi-lo)/2.0;        if(f(mid)>y)            hi=mid;        else            lo=mid;    }    return hi;}int main(){    int t;    LD y;    LD fmax=f(100.0),fmin=f(0);    scanf("%d",&t);    while(t--)    {        scanf("%lf",&y);        if(y<fmin||y>fmax)        {            printf("No solution!\n");        }        else            printf("%.4lf\n",bs(y));    }    return 0;}

0 0