二分法

1.题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=72756#problem/A

2.题意:任给一个数Y求在0到100中间是否存在一个数字x满足方程: 8*x^4 + 7*x^3 + 2*x^2+ 3*x + 6 == Y如果存在则输出保留小数点后四位,如果不存在输出No solution!

3.解题思路:采用函数调用的形式,先定义一个函数计算 8*x^4 + 7*x^3 + 2*x^2+ 3*x + 6的值。

然后在主函数中调用。。。主函数:在0.0到100.0之间利用二分法每次找到他们的中间值,如果他算出来的方程的值和输入值的差小于或者等于1*10^-5说明存在x,输出。

4.#include<stdio.h>
#include<math.h>
double f(double x)
{
    return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;   //将接收到的x计算他的方程值
}
int main()
{
    int n;
    double m,hei,low,mid;
  mid=(low+hei)/2;
    scanf("%d",&n);
    while(n--)
    {
        hei=100.0;
        low=0.0;
        scanf("%lf",&m);
        if(f(0)>m||f(100)<m)       //如果输入的数值不在0到100方程的解中
        {
            printf("No solution!\n");
            continue;
        }
        while(fabs(f(mid)-m)>1e-5)    //判断mid的计算结果与输入m的差是否大于1*10^-5
        {
            if(f(mid)>m)            //如果mid的计算值大于m,则将mid的前一个数赋值给hei
                hei=mid-1;
            else low=mid+1;     //否则将它后面一个数赋值给low
            mid=(low+hei)/2;
        }
        printf("%.4f\n",mid);
    }
    return 0;
}

posted on 2015-03-28 22:28  xiaodaizi  阅读(199)  评论(0)    收藏  举报