题目链接:NYOJ: http://acm.nyist.net/JudgeOnline/problem.php?pid=503
HDU : http://acm.hdu.edu.cn/showproblem.php?pid=2199
典型的二分查找,注意
1: 精度问题。
2:NYOJ表达式是8*x^4 - 7*x^3 + 2*x^2 + 3*x + 6 == Y。而HDU表达式是8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y。
下面是代码:
#include<stdio.h>
#include<math.h>
double fun(double x)
{
return 8*pow(x,4)-7*pow(x,3)+2*pow(x,2)+3*x+6;
}
double Binary_search(double left ,double right,double y)
{
while(right-left>1e-10)
{
double mid=(right+left)/2;
if(fun(mid)<y)
left=mid;
else
right=mid;
}
return left;
}
int main()
{
int t;
double y;
scanf("%d",&t);
while(t--)
{
scanf("%lf",&y);
if(fun(0)>y||fun(100)<y)
puts("No solution!");
else printf("%.4lf\n",Binary_search(0,100,y));
}
}