这题是道水题,用数学方法做比较简单。因为在做二分法的专题,所以这里采用二分的方式做,很简单,但是还是要用到数学的知识,比如三角形相似,圆台的
体积公式等。
#include"iostream" #include"stdio.h" #include"algorithm" #include"string.h" #include"cmath" #define inf 1e-9 using namespace std; double pi=acos(-1.0); double r,R,h,v,y; double V(double mid,double x) { return pi*mid*(x*x+x*r+r*r)/3; } int main() { int t; cin>>t; while(t--) { cin>>r>>R>>h>>v; y=r*h/(R-r); double left=0; double right=h; double mid; while(right-left>inf) { mid=(left+right)/2; double x=r+(R-r)*mid/h;//之前这里出现了问题,导致了精确度变小。。。 double VV=V(mid,x); if(fabs(VV-v)<=inf) break; else if(VV>v) right=mid-inf; else left=mid+inf; // cout<<mid<<endl; } printf("%.6lf\n",mid); } return 0; }