二分法
1.题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=72756#problem/A
2.题意:任给一个数Y求在0到100中间是否存在一个数字x满足方程: 8*x^4 + 7*x^3 + 2*x^2+ 3*x + 6 == Y如果存在则输出保留小数点后四位,如果不存在输出No solution!
3.解题思路:采用函数调用的形式,先定义一个函数计算 8*x^4 + 7*x^3 + 2*x^2+ 3*x + 6的值。
然后在主函数中调用。。。主函数:在0.0到100.0之间利用二分法每次找到他们的中间值,如果他算出来的方程的值和输入值的差小于或者等于1*10^-5说明存在x,输出。
4.#include<stdio.h>
#include<math.h>
double f(double x)
{
return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6; //将接收到的x计算他的方程值
}
int main()
{
int n;
double m,hei,low,mid;
mid=(low+hei)/2;
scanf("%d",&n);
while(n--)
{
hei=100.0;
low=0.0;
scanf("%lf",&m);
if(f(0)>m||f(100)<m) //如果输入的数值不在0到100方程的解中
{
printf("No solution!\n");
continue;
}
while(fabs(f(mid)-m)>1e-5) //判断mid的计算结果与输入m的差是否大于1*10^-5
{
if(f(mid)>m) //如果mid的计算值大于m,则将mid的前一个数赋值给hei
hei=mid-1;
else low=mid+1; //否则将它后面一个数赋值给low
mid=(low+hei)/2;
}
printf("%.4f\n",mid);
}
return 0;
}
浙公网安备 33010602011771号