題目連接:http://acm.hdu.edu.cn/showproblem.php?pid=2899php
題意:給了你一個函數,而後給了你x的變化範圍0到100,讓你求出函數的最小值。c++
分析:它讓你求的是函數的最小值,因此咱們能夠先對函數求導,獲得的導數就能夠判斷函數的單調性了,求出導數後,咱們發現若是函數的導數是x越大所求的的導數也就越大,函數
當導數一直爲負數時,函數是單調遞減的;當導數開始是負數,而後是正數,那說明函數開始時遞減的而後是遞增的,那麼當導數爲0時函數值確定是最小的!咱們求導數爲0的spa
過程,咱們能夠用二分實現!code
#include <bits/stdc++.h> #define eps 1e-7 //該常量爲精度 #define F 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x #define DF 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y //導數,函數隨着x增大單調遞增 using namespace std; int main() { int n; double y; double x,l,r;//x爲變量 cin>>n; while(n--) { cin>>y; l=0.0; r=100.0; while(r-l>=eps) { x=(l+r)/2;//範圍的中間值 if(DF<0) {//當導數小於0,符合函數等於0的x必定在中間值的右邊 l=x; } else if(DF>0) {//當導數大於0,符合函數等於0的x必定在中間值的左邊 r=x; } else if(DF<eps) {//當DF小於最小精度時可近似認爲導數值等於0了,即獲得咱們要求的x, break; } } printf("%.4lf\n",F); } }