HDU-2899(简单数学问题+二分查找)

其实就是简单的数学求极值问题.

看了代码大家都会知道的.

本来是想好好学学二分查找这种方法的,但是发现专门考二分查找的不多,它只是种思想,是一种工具.

贴出代码:

#include 
#include 
#include 
#include 

const double eps=1e-8; 


int y;

double g(double x)
{
	return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x;
}

double f(double x)
{
	return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-x*y;
}


int main()
{
	int T;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&y);
		if(g(100.0)-y<=0)
			printf("%.4lf\n",f(100.0));
		else
		{
			double l=0,r=100;
			double mid;
			while(l+eps<=r)
			{
				mid=(l+r)/2;
				if(g(mid)-y<0)
					l=mid;
				else
					r=mid;
			}
			printf("%.4lf\n",f(mid));
		}
	}
	return 0;
}


 

你可能感兴趣的:(数学概念与方法,二分查找)