这个题二分比较明显,但是二分法要注意返回的值,返回不同的值有精度问题。
#include <stdio.h>
#include <math.h>double an(double x)
{
return 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;
}
double bs(double low,double high,double y)
{
double mid;
while(high-low>1e-7)
{
mid=(high+low)/2;
if(an(mid) > y) high=mid;
else low=mid;
}
return high;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
double y;
scanf("%lf",&y);
if(y<an(0)||y>an(100.0))
printf("No solution!\n");
else
printf("%.4lf\n",bs(0,100,y));
}
return 0;
}