搜索—Problem_1001
题意
数学方程问题,给定一个关于x和y的表达式,其中y是输入的,x是0-100间的数,根据输入的y的值求表达式中x的近似值。
解题思路
所给表达式的函数是单调性的,所以对表达式中x的取值可以采用二分搜索的方法,然后比较逐步调整x的最佳范围,最终找到最佳符合条件的x,并输出。
感想
先做的第二题,又看的这个,算法稍有改变,但题目类似。
AC代码
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
double f(double x)
{
return 8*pow(x,4.0)+7*pow(x,3.0)+2*pow(x,2.0)+3*x+6;
}
int main()
{
int t,y;
cin>>t;
while(t--)
{
cin>>y;
double low=0;
double high=100;
double mid;
if(f(low)>y||f(high)<y)
cout<<"No solution!\n";
else
{
while(high-low>1e-9)
{
mid = (low + high) / 2;
if( f(mid)>y ) high=mid;
else low=mid;
}
cout<<setiosflags(ios::fixed)<<setprecision(4)<<mid<<endl;
}
}
}