您的位置:首页 > 其它

HDU2199Can you solve this equation?(二分)

2016-07-26 11:05 246 查看
Description

现在,给出等式8* X^4+ 7* X^3+ 2* X^2+ 3 * X +6= Y,请找出他在0和100之间的解(包含0和100)。

现在,请你试试运气。。。。

Input

输入的第一行包含一个整数T(1 <= T <=100),表示测试用例的数目。接下来T个数字,每一行都有一个实数Y(abs(Y)<=10^10);

Output

对于每个测试用例,如果有解,你应该输出一个实数(精确到小数点后4位,四舍五入),如果在0到100之间无解,就输出“No solution!”。

Sample Input

2

100

-4

Sample Output

1.6152

No solution!
思路:二分法,每次都用中间的点与所给值判断大小,如果小于则应该在前面区间更新尾点,如果大于在后面区间更新初始点。这里注意douuble不可能正好等于,所以要定义精度判断。

代码:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<math.h>
#define xps 1e-12
using namespace std;
double s(double x)
{
return x=8.0*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6;
}
int main()
{
int t;
cin>>t;
double max=s(100),min=s(0);
while(t--)
{
int p=1000;
int t=0;
double n;
cin>>n;
if(n>max||n<xps+min)
printf("No solution!\n");
else
{
double l=0.0,e=100.0;
while(p--)
{
double mid=(l+e)/2.0;
if(s(mid)<n)
{
l=mid+xps;
}
else
{
e=mid+xps;
}
}
printf("%.4lf\n",l);
}
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: