原题样式:
题目大意:
该题就是求该方程的解,那么该题乍一看想的就是直接一步步来,然后不用想必然要超时;其次观察它的形式,发现他是递增的函数,那么简化其步骤即可(用二分即可)。比如从1到100,递增函数,你用50去尝试,发现比答案要小则左边的数就可以不需要了,对右边的数继续二分最终得到答案;
代码:
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const double esp=1e-10;
int F(double m)
{
return 8*pow(m,4)+7*pow(m,3)+2*pow(m,2)+3*m+6;
}
int main()
{
int T;
double low,high,x,y,ans;
cin>>T;
while(T--)
{
scanf("%lf",&y);
low=0.0;
high=100.0;
if(y>F(100.0)||y<6)
{
printf("No solution!\n");
continue;
}
while((high-low)>esp)
{
x=(low+high)/2.0;
ans=F(x);
if(ans<y)
low=x+1e-10;
else
high=x-1e-10;
}
printf("%.4lf\n",x);
}
简要介绍pow函数:
C++:头文件:<cmath>
pow(x,y)代表:x的y次方