strange function

Strange fuction

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 45   Accepted Submission(s) : 36

Font: Times New Roman | Verdana | Georgia

Font Size:  

Problem Description

Now, here is a fuction:
  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
Can you find the minimum value when x is between 0 and 100.

Input

The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.(0 < Y <1e10)

Output

Just the minimum value (accurate up to 4 decimal places),when x is between 0 and 100.

Sample Input

2
100
200

Sample Output

-74.4291

-178.8534

题意:找出那个函数在x属于0~100内的最小值。

思路:首先想到的应该是求导求驻点,然后用二分法逼近。

#include "cstdio"
#include "cstring"
#include "cmath"
#define mi 0.00001
using namespace std;
double x,y;
double f(double x)
{
	return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;
}
double fun(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("%lf",&y);
		double l=0,r=100;
		double min;
		double mid=(l+r)/2;
		while(fabs(f(mid))>mi)
		{
			mid=(l+r)/2;
			double a=f(mid);
			if(a>=0)
			{
				r=mid;
			}
			else if(a<0)
			{
				l=mid;
			}
		}
		printf("%.4lf\n",fun(mid));
	}
	return 0;
}



你可能感兴趣的:(二分法)