HDU Can you solve this equation?

来源:互联网 发布:linux mysql安装图解 编辑:程序博客网 时间:2024/05/17 05:13

//二分, 当二分不断接近, x的值在精度误差范围内就可以得到x,
// 如果x不在上下界范围内就输出"No solution!";

#include <iostream>#include <cstdio>#include <queue>#include <cstring>#include <cmath>#include <vector>#include <set>#include <stack>#include <algorithm>//#include "myAlgorithm.h"#define MAX 105#define INF (1e8 + 5)#define eps 1e-11#define Rep(s, e) for( int i = s; i <= e; i++)#define Cep(e, s) for( int i = e; i >= s; i --)using namespace std;//8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Ystring ansNo = "No solution!";double Y;double func(double key){    return 8.0 * key *key * key * key + 7.0 * key * key * key + 2.0 *key * key + 3.0 * key + 6.0;}int check(double key){    double temp = func(key);     if( temp - Y > 0)return 1;     if( temp - Y  < 0)return -1;      return 0;}void b_search(){   double D = 0 - eps, U = 100 + eps, mid;    while(D < U){        mid = (D + U)/(double)2.0;        if(!(fabs(mid - U) > eps && fabs(mid -D) > eps))break;//        printf("mid %-55.50f\n",mid );//        printf("U   %-55.50f\n",U );//        printf("D   %-55.50f\n\n",D);        int res = check(mid);        if(res == 0){            break;        }else if(res == 1){            //cout<<1<<endl;            U = mid;        }else if(res == -1){            //cout<<-1<<endl;            D = mid;        }    }    if(mid >= 0 && mid <= 100){        printf("%.4f\n", mid);    }else        cout<<ansNo<<endl;}int main() {     int T;    //freopen("in.tx0t", "w", stdout);    cin>>T;    while(T--){        scanf("%lf", &Y);        b_search();    }    return 0;}/**/