hdu2199 Can you solve this equation?(二分)
2016-03-02 18:51
477 查看
搜索四处碰壁,来二分玩玩。。。
有点注意点就是pow的用法和浮点数的处理吧,不过我还是第一次用二分的思想,尤其是中间的while取极限值,这好像只限于计算机吧,手算根本不行。。。
真是越搞越神奇啊。。。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <iostream>
#include <stdlib.h>
using namespace std;
const int N = 100;
const int INF = 1000000;
#define ans(x) 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6
int main()
{
// freopen("in.txt", "r", stdin);
int T;
double r, l, mid, Y;
scanf("%d", &T);
while(T --)
{
scanf("%lf", &Y);
if(Y < ans(0) || Y > ans(100)) printf("No solution!\n");
else
{
r = 100;
l = 0;
while(fabs(r - l) > 1e-10)
{
mid = (r + l) / 2.0;//注意这里是+号,还有2.0
if(Y < ans(mid)) r = mid;
else l = mid;
}
printf("%.4lf\n", r);
}
}
return 0;
}
有点注意点就是pow的用法和浮点数的处理吧,不过我还是第一次用二分的思想,尤其是中间的while取极限值,这好像只限于计算机吧,手算根本不行。。。
真是越搞越神奇啊。。。
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <cmath>
#include <iostream>
#include <stdlib.h>
using namespace std;
const int N = 100;
const int INF = 1000000;
#define ans(x) 8*pow(x,4)+7*pow(x,3)+2*pow(x,2)+3*x+6
int main()
{
// freopen("in.txt", "r", stdin);
int T;
double r, l, mid, Y;
scanf("%d", &T);
while(T --)
{
scanf("%lf", &Y);
if(Y < ans(0) || Y > ans(100)) printf("No solution!\n");
else
{
r = 100;
l = 0;
while(fabs(r - l) > 1e-10)
{
mid = (r + l) / 2.0;//注意这里是+号,还有2.0
if(Y < ans(mid)) r = mid;
else l = mid;
}
printf("%.4lf\n", r);
}
}
return 0;
}
相关文章推荐
- 【HDU 5366】The mook jong 详解
- 【HDU 2136】Largest prime factor 详细图解
- HDU 1568
- HDU1290
- HDU1568(Fobonacci公式)
- HDU ACM Step 2.2.2 Joseph(约瑟夫环问题)
- HDU 1405
- HDU 1297
- hdu 1205
- hdu 2087
- hdu 1016
- HDU 4898 The Revenge of the Princess’ Knight ( 2014 Multi-University Training Contest 4 )
- HDU 5592 ZYB's Premutation 线段树(查找动态区间第K大)
- HDU 5240 Exam (好水的题)
- HDU5237 Base64 大模拟
- HDU 1000
- HDU 1001
- 2015-11-11 hdu新生赛 A题(AC)
- 2015-11-11 hdu新生赛 C题(结束后一发AC)
- 2015-11-11 hdu新生赛 E题(结束后一发AC)