LeeBlog

导航

HDU 2199 Can you solve this equation?

这题开始差点把他做一元二次方程给解了,后面用到POW时才有感觉,后来想得好复杂,四元一次怎么解啊 ,最后好玩把0-100内所有的函数值全部打出来,竟发现左边的函数在0-100内是单调递增的,看到这儿各位该知道了吧,直接二分;还有判断循环要用函数值,不要用自变量,用自变量要精确到10的-6次方

#include<stdio.h>
#include<math.h>
double x,y;
double f( double x )
{
    return  8 * pow( x,4 ) + 7*x*x*x + 2*x*x + 3*x + 6;
}
int main( )
{
    int t;
    scanf( "%d",&t );
    double min, max;
    while( scanf( "%lf",&y ) != EOF,t-- )
    {
           min = f( 0 );
           max = f( 100 );
           if( y > max || y < min )
               printf( "No solution!\n" );
           else
           {
               double a = 0.0,b = 100.0,mid = 50;
               double e1 = f( a ),e2 = f( mid ),e3 = f( b );
               while( fabs( e1 - e2 ) > 0.0001 )
               {
                      if( e2 > y )
                      {
                          b = mid;
                          e3 = e2;
                          mid = ( a + b ) / 2;
                          e2 = f( mid );
                      }
                       else
                       {
                           a = mid;
                           e1 = e2;
                           mid = ( a + b ) / 2;
                           e2 = f( mid );
                       }
                      }
               printf( "%.4lf\n",mid );
           }
           }
    return 0;
}

posted on 2011-03-21 21:07  LeeBlog  阅读(171)  评论(0编辑  收藏  举报