大意:给你一方程,让你求零点。

思路:对函数求导,知道它是单调递减的。由于保留4位小数,可以通过二分枚举大于1e-9的方法求零点而不会无限循环。

CODE:

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
using namespace std;

#define eps 1e-9
double p, q, r, s, t, u;

double f(double x)
{
    return p*exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) + t*x*x+u;
}

void solve()
{
    double s1 = f(0), s2 = f(1);
    if(s1*s2 > 0)
    {
        printf("No solution\n");
    }
    else
    {
        double x = 0.0, y = 1.0, ans, m;
        while(y-x > eps)
        {
            m = x+(y-x)/2.0;
            ans = f(m);
            if(ans < 0) y = m;
            else x = m; 
        }
        printf("%.4lf\n", y);
    }
}

int main()
{
    while(~scanf("%lf%lf%lf%lf%lf%lf", &p, &q, &r, &s, &t, &u))
    {
        solve();
    }
    return 0;
}

 

 

posted on 2012-10-14 18:52  有间博客  阅读(276)  评论(0编辑  收藏  举报