输入输出格式输入格式:
第一行一次包含一个正整数N和两个实数l、r,含义如题目描述所示。
第二行包含N+1个实数,从高到低依次表示该N次函数各项的系数。
输出格式:
输出为一行,包含一个实数,即为x的值。四舍五入保留5位小数。
输入输出样例
输入样例#1:
3 -0.9981 0.51 -3 -3 1
输出样例#1:
-0.41421
话说要注意的地方大概就是最好控制次数,不然容易精度流失
画了一个简陋的图
1 #include2 #include 3 #include 4 #include 5 using namespace std; 6 double a[20],l,r; 7 int n; 8 void inti() 9 {10 scanf("%d%lf%lf",&n,&l,&r);11 for(int i=n;i>=0;i--)12 scanf("%lf",&a[i]);13 }14 double f(double x)15 {16 double tmp=1,sum=a[0];17 for(int i=1;i<=n;i++)18 {19 tmp=tmp*x;20 sum+=tmp*a[i];21 }22 return sum;23 }24 void work()25 {26 double mid1,mid2;27 for(int i=1;i<=200;i++)28 {29 mid1=l+(r-l)/3;30 mid2=l+(r-l)/3*2;31 if(f(mid1)>f(mid2)) r=mid2;32 else l=mid1;33 }34 printf("%.5lf",l);35 36 } 37 int main()38 {39 inti();40 work();41 return 0;42 }
以上By Native_carrot