现在,这里有一个功能:
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 der(double mid) 4 { 5 return 42*pow(mid,6)+48*pow(mid,5)+21*mid*mid+10*mid; 6 } 7 double cacu(double mid,double y) 8 { 9 return 6*pow(mid,7)+8*pow(mid,6)+7*pow(mid,3)+5*mid*mid-y*mid; 10 } 11 int main() 12 { 13 int n; 14 double y,left,right,mid; 15 while(cin>>n) 16 { 17 while(n--) 18 { 19 scanf("%lf",&y); 20 left = 0; 21 right = 100; 22 while(right - left > 1e-8)23 { 24 mid = (left + right) /2; 25 if(der(mid) - y > 0) 26 right = mid; 27 else 28 left = mid; 29 } 30 printf("%.4lf\n",cacu(mid,y)); 31 } 32 33 } 34 return 0; 35 }
时间: 2024-12-29 05:37:37