简单二分查找,应该属于水题了吧...纠结的是样例没过,一试竟然AC。
这两天状态太差了,发生这么多事,有点不知所措的感觉。现在都过去了,感觉还是挺烦燥...只能从头加深下搜索了。
code:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<iomanip>
using namespace std ;
double y ;
double l, r, m ;
double slove(double x){
return 8*pow(x, 4.0) + 7*pow(x, 3.0) + 2*pow(x, 2.0) + 3*x + 6 ;
}
int main() {
int t ;
scanf("%d", &t) ;
while(t--){
scanf("%lf", &y) ;
if(slove(0)<=y&&y<=slove(100)){
l = 0 ;
r = 100 ;
while(r-l>1e-6){ //要求 accurate up to 4 decimal places
//所以计算时要精确到1e-5,最低精度1e-6
m = (l + r) / 2 ;
double ans = slove(m) ;
if(ans>y)
r = m ;
else
l = m ;
}
printf("%.4lf\n", (l+r)/2) ;
}else
printf("No solution!\n") ;
}
return 0 ;
}
#include<cstdio>
#include<cmath>
#include<iomanip>
using namespace std ;
double y ;
double l, r, m ;
double slove(double x){
return 8*pow(x, 4.0) + 7*pow(x, 3.0) + 2*pow(x, 2.0) + 3*x + 6 ;
}
int main() {
int t ;
scanf("%d", &t) ;
while(t--){
scanf("%lf", &y) ;
if(slove(0)<=y&&y<=slove(100)){
l = 0 ;
r = 100 ;
while(r-l>1e-6){ //要求 accurate up to 4 decimal places
//所以计算时要精确到1e-5,最低精度1e-6
m = (l + r) / 2 ;
double ans = slove(m) ;
if(ans>y)
r = m ;
else
l = m ;
}
printf("%.4lf\n", (l+r)/2) ;
}else
printf("No solution!\n") ;
}
return 0 ;
}