canyon?最基本的二分查找

来源:互联网 发布:java 多线程 线程池 编辑:程序博客网 时间:2024/06/07 09:31
Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;<br>Now please try your lucky.

Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has a real number Y (fabs(Y) <= 1e10);

Output
For each test case, you should just output one real number(accurate up to 4 decimal places),which is the solution of the equation,or “No solution!”,if there is no solution for the equation between 0 and 100.

Sample Input
2<br>100<br>-4<br>

Sample Output
1.6152<br>No solution!<br>
#include<iostream>#include<cmath>#include<stdio.h>using namespace std;double f(double x){    double y = 8*x*x*x*x + 7*x*x*x + 2*x*x + 3*x + 6;    return y;}int main(){    double y, left = 0.0,right = 100.0,mid,x;    int n;    scanf("%d",&n);    while(n--)    {      scanf("%lf",&y);      if(y<f(0)||y>f(100))      {          printf("No solution!\n");          return 0;      }    while((right - left)>1e-8)//二分查找的步骤代码,此处使精度    {       mid = (left + right)/2;       if(y>f(mid))       {           left = mid;       }       else       {           right = mid;       }    }    printf("%.4lf\n",mid);//保留4位小数    }}
0 0
原创粉丝点击