您的位置:首页 > 其它

hdu 2199 Can you solve this equation?(二分法)

2015-08-30 19:29 309 查看
原题链接:
http://acm.hdu.edu.cn/showproblem.php?pid=2199
题目大意:

8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6 == Y

给你Y,求x。精确到小数点后四位。

二分法

详见代码:

#include<iostream>
#include<cmath>
using namespace std;
double F(double x)
{
return  8 * x*x*x*x + 7 * x*x*x + 2 * x*x + 3 * x ;
}
int main()
{
int T;
cin >> T;
while (T--)
{
double n;
cin >> n;
if (n<6 || n>807020306)// 当0<=x<=100时 , 6<=Y<=807020306
{
cout << "No solution!" << endl;
continue;
}
n -= 6;//减去那个常数6,少一丢丢运算量。(也可不省)
double left=0, right=100;
double mid = 50;
while (abs(F(mid) - n)> 0.0001)//二分法
{
if (F(mid) > n)
{
right = mid;
mid = (left + right) / 2;
}
else {
left = mid;
mid = (left + right) / 2;
}
}
printf("%.4lf\n", mid);//会自动四舍五入
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: