UVA 10341 - Solve It

  一道解方程的题,给定区间0到1.如果f(0) * f(1)大于零代表这个区间内所有的x对应的y值都在y轴

的一侧,也就是无解。然后用二分的方法解方程。注意变量都要定义成double。

#include<cstdio>
#include<cstdlib>
#include<cmath>

const double T = 10e-8;
double p, q, r, s, t, u;

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

int main()
{
while( scanf( "%lf%lf%lf%lf%lf%lf", &p, &q, &r, &s, &t, &u) != EOF)
{
double l = 0.0, r = 1.0;
if( res(l) * res(r) > 0){
printf( "No solution\n");
continue;
}
while( r - l > T)
{
double mid = (r + l) / 2.0;
if( res(mid) * res(l) > 0) l = mid;
else r = mid;
}
printf( "%.4f\n", r);
}
return 0;
}

 

你可能感兴趣的:(uva)