给出一个N次函数,保证在范围[l,r]内存在一点x,使得[l,x]上单调增,[x,r]上单调减。试求出x的值。
学习一下三分法
#include<bits/stdc++.h> using namespace std; const double dbs=0.000001; double l,r,num[50]; int n; double f(double x){ double ans=0; for(int i=n+1;i>=1;i--)ans=ans*x+num[n+2-i]; return ans; } int main() { cin>>n>>l>>r; for(int i=1;i<=n+1;i++)cin>>num[i]; while(l<=r-dbs) { double ll=l+(r-l)/3,rr=r-(r-l)/3; if(f(ll)<f(rr))l=ll; else r=rr; } printf("%.5lf",l); }