一道简单入门题:传送门:二分查找答案
题解:
先观察函数:
f(x)=8*pow(x,4) + 7*pow(x,3) + 2*pow(x,2) + 3*x + 6
可以看出这个函数是单调递增的函数,在
[0,100]这个区间,所以当ans>=f(0)&&ans<=f(100)这个区间内是有答案的,然后题目要求保留四位小数,我们应该在[0,100]二分答案,当l-r>1e-8时可以继续进行,直到答案的精度更高后,结束
AC代码:
#include<bits/stdc++.h>
using namespace std;
double re_ans(double x)
{
return 8*pow(x,4) + 7*pow(x,3) + 2*pow(x,2) + 3*x + 6;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double ans;
scanf("%lf",&ans);
if(ans>=re_ans(0)&&ans<=re_ans(100))
{
double l=0,r=100,q_ans;
while(r-l>1e-8)
{
double mid=(l+r)/2;
if(re_ans(mid)>ans)
{
r=mid-1e-9;
q_ans=mid;
}
else
{
l=mid+1e-9;
}
}
printf("%.4lf\n",q_ans);
}
else
{
printf("No solution!\n");
}
}
}

本文介绍了一种使用二分查找算法求解特定多项式方程的方法,通过在预定义区间内进行二分搜索,找到满足精度要求的根。以函数f(x)=8x^4+7x^3+2x^2+3x+6为例,演示了如何在[0,100]区间内精确到四位小数地寻找方程的解。

552

被折叠的 条评论
为什么被折叠?



