strange function

来源:互联网 发布:java初级题目 编辑:程序博客网 时间:2024/05/29 16:39

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

2100200

Sample Output

-74.4291

-178.8534

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

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

#include "cstdio"#include "cstring"#include "cmath"#define mi 0.00001using 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;}



0 0
原创粉丝点击