搜索四处碰壁,来二分玩玩。。。
有点注意点就是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;
}