二分法的基础应用:
题目如下:
|
Can you solve this equation?Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13005 Accepted Submission(s): 5826
Problem Description
Now,given the equation 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y,can you find its solution between 0 and 100;
Now please try your lucky.
Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has a real number Y (fabs(Y) <= 1e10);
Output
For each test case, you should just output one real number(accurate up to 4 decimal places),which is the solution of the equation,or “No solution!”,if there is no solution for the equation between 0 and 100.
Sample Input
Sample Output
|
AC码如下
<span style="font-size:14px;">#include<stdio.h>
double fangcheng(double x) //注意函数定义的时候都必须用double
{
double y=8.0*x*x*x*x+7.0*x*x*x+2.0*x*x+3.0*x+6.0;
return y;
}
double fabs(double m) //精度函数定义方法
{
return m>0?m:-m;
}
int main()
{ int n;
double a;
scanf("%d",&n);
while(n--)
{
scanf("%lf",&a);
double right=100.0,left=0.0,mid;
if(fangcheng(0.0)>a||fangcheng(100.0)<a)
printf("No solution!\n");
else
{
while(fangcheng(right)-fangcheng(left)>=1e-5) //注意精度的选取,尽量大的原则
{
mid=(left+right)/2.0;
if(fabs(fangcheng(mid)-a)<=1e-5)
break;
else if(fangcheng(mid)<a&&fabs(fangcheng(mid)-a)>1e-5)
left=mid; //这个不能使MID-1,只有在数组位置变化的或者整形的时候才加减1!!
else
right=mid;
}
printf("%.4lf\n",mid);
}
}
return 0;
}</span>