【杭电】[2199]Can you solve this equation?
二分搜索答案
与Y进行比较可知道mid与res的大小关系
注意x的取值为0~100
因为函数f(m)=8*m4+7*m3+2*m2+3*m+6
在0~100上单调递增
所以如果Y<f(0)||Y>f(100)
是没有结果的
#include<stdio.h>
double n;
double f(double m) {
return 8*m*m*m*m+7*m*m*m+2*m*m+3*m+6;
}
bool judge(double m) {
if(f(m)>n)
return true;
else
return false;
}
int main() {
int T;
scanf("%d",&T);
while(T--) {
scanf("%lf",&n);
if(n<f(0.0)||n>f(100.0)) {
printf("No solution!\n");
continue;
}
double r=10000000000,l=0,res;
while(r-l>1e-6) {
double mid=(r+l)/2;
if(judge(mid)) {
res=mid;
r=mid;
} else
l=mid;
}
printf("%.4lf\n",res);
}
return 0;
}