ACM Strange fuction

现在,这里有一个功能:
  F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100) 
当x在0到100之间时,你能找到最小值吗?

输入

第一行包含一个整数T(1 < = T < = 100),这意味着测试用例的数量。然后T行,每一行只有一个实数Y。(0 < Y < 1e10)当x在0到100之间时,输出值为最小值(精确到小数点后4位)。

Sample Input

2
100
200

Sample Output

-74.4291
-178.8534
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 double del(double mid)  /*求导*/
 4 {
 5     double temp = 42*pow(mid,6)+48*pow(mid,5)+21*mid*mid+10*mid;
 6     
 7     return temp;
 8 }
 9 
10 double cacu(double mid ,double y)
11 {
12     double ans;
13     ans = 6*pow(mid,7)+8*pow(mid,6)+7*pow(mid,3)+5*mid*mid-y*mid;
14     return ans;
15 }
16 int main()
17 {
18     int t;
19     double y; 
20     while(cin>>t)
21     {
22         while(t--)
23         {
24             scanf("%lf",&y);
25             double left = 0,right = 100,mid;
26             while( right-left  >1e-7)
27             {
28                 mid =(left+right) /2;
29                 if(del(mid) - y > 0)
30                     right = mid;
31                 else
32                     left = mid;
33             }    
34             printf("%.4lf\n",cacu(mid,y));
35         }
36     
37     } 
38     return 0;
39 }

 

posted @ 2017-08-24 00:23  听说这是最长的名字了  阅读(294)  评论(0编辑  收藏  举报