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.
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 200Sample Output
-74.4291 -178.8534
解答:本题采用二分的思想,对f(x)求导得其导函数恒大于零,因此当f'(x)=0时,则得到答案。
#include<stdio.h>
double f(double x,double y){
double i,sum=1;
for(i=1;i<=y;i++)
sum=sum*x;
return sum;
}
int main(){
int n,i;
double y,low,high,mid;
scanf("%d",&n);
for(i=1;i<=n;i++){
scanf("%lf",&y);
low=0;high=100;
while((high-low)>=0.000001){
mid=(low+high)/2;
if((42*f(mid,6)+48*f(mid,5)+21*f(mid,2)+10*mid-y)>0)//上界大了,以mid为新的上界
high=mid;
else//下界小了,以mid为新的下界
low=mid;
}
mid=(low+high)/2;
printf("%.4lf\n",(6*f(mid,7)+8*f(mid,6)+7*f(mid,3)+5*f(mid,2)-y*mid));
}
return 0;
}