UVA 10341 Solve It

 

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

思路:对函数求导,知道它是单调递减的。由于保留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;
}

 

 

你可能感兴趣的:(uva)