告诉你一幢楼的高度,楼的层数,每层一样高。
每一层的底边是一个圆,下一层的玻璃一定要包括进上一层的底边。
每层玻璃铺成棱柱形,玻璃有最小面积限制。
问你这层楼最小的总玻璃数是多少。
求出每层最小的玻璃块数,然后直接计算即可。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 using namespace std; 5 const double PI=4*atan(1); 6 int F; 7 double R,r,H,s; 8 double r1,r0,h,ans; 9 double cal(int x,double rr) 10 { 11 return 2.0*rr*tan(PI/x)*h; 12 } 13 double div2(double rr) 14 { 15 int l=3,r=1e6,mid; 16 while(l<=r) 17 { 18 mid=(l+r)>>1; 19 if(cal(mid,rr)>s-1e-8) l=mid+1; 20 else r=mid-1; 21 } 22 return cal(l-1,rr)*(l-1); 23 } 24 int main() 25 { 26 while(~scanf("%lf%lf%lf%d%lf",&R,&r,&H,&F,&s)) 27 { 28 r0=(R-r)*1.0/F; 29 h=H*1.0/F; 30 ans=0; 31 for(int i=0;i<F;i++) 32 { 33 ans+=div2(r+r0*i); 34 } 35 printf("%.3f ",ans); 36 } 37 }