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;
}
本人还是新手 ,转载请注明来自Lvsi‘s home
浙公网安备 33010602011771号