您的位置:首页 > 其它

canyon?最基本的二分查找

2016-04-18 13:23 330 查看
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.

[align=left]Input[/align]
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);

[align=left]Output[/align]
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.

[align=left]Sample Input[/align]

2<br>100<br>-4<br>

[align=left]Sample Output[/align]

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位小数
    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: