您的位置:首页 > 其它

hdu 2199 Can you solve this equation?

2013-08-07 19:57 344 查看
点击打开hdu2199

思路: 二分

分析:

1 求题目给定的等式是否有[0,100]之间的解

2 8*x^4 + 7*x^3 + 2*x^2 + 3*x + 6是一个单调递增的函数,那么求解的话我们利用二分的思想

3 注意判断没有解的情况就是Y < 0 或者 Y大于x为100的时候等式的值

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

const double eps = 1e-10;

double Pow(double x , int y){
double sum = 1;
for(int i = 0 ; i < y ; i++)
sum *= x;
return sum;
}

void solve(double n){
double left = 0.0;
double right = 100.0;
double mid;
double sum = 8*Pow(100,4)+7*Pow(100,3)+2*Pow(100,2)+300;
n -= 6;
if(n < 0 || n > sum){
puts("No solution!");
return;
}
while(right-left > eps){
mid = (left+right)/2.0;
sum = 8*Pow(mid,4)+7*Pow(mid,3)+2*Pow(mid,2)+
3*mid;
if(sum - n > eps){
right = mid;
}
else{
left = mid;
}
}
printf("%0.4lf\n" , left);
}

int main(){
int cas;
double n;
scanf("%d" , &cas);
while(cas--){
scanf("%lf" , &n);
solve(n);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: