我们对这个函数求二阶导数,发现他的二阶导数是恒大于0的,那么他的导数是单调的,且在某时刻为0,那么这时的x值就是极值处的x值,其实题目说了,有最小值,那么我们三分水过去就好了。
反思:精度不够,因为是log3的,所以的40次循环就WA,50次就可以A。
//By BLADEVIL #include <iostream> #include <cstdio> using namespace std; int task; double y; double f(double x) { return (6*x*x*x*x*x*x*x+8*x*x*x*x*x*x+7*x*x*x+5*x*x-y*x); } int main() { scanf("%d",&task); while (task--) { cin>>y; double l=0,r=100; for (int i=1;i<=50;i++) { double mid1=l+(r-l)/3,mid2=mid1+(r-l)/3; if (f(mid1)>f(mid2)) l=mid1; else r=mid2; } printf("%.4f ",f(l)); } return 0; }