读书人

POJ 3737 UmBasketella 3分

发布时间: 2012-09-16 17:33:16 作者: rapoo

POJ 3737 UmBasketella 三分

来源:http://poj.org/problem?id=3737

题意:给你一个圆锥,圆锥面积给出,问你圆锥的最大体积是多少。

思路:枚举底面圆半径,算圆锥的体积。可以列出表达式,满足三分,因此可以三分枚举底面圆半径。

代码:

#include <iostream>#include <cmath>#include <string.h>#include <cstdio>using namespace std;const double pi = acos(-1.0);const double eps = 1e-6;double cal(double x,double s){double R = (s - x * x * pi) / pi / x;double H = sqrt(R * R - x * x);return x * x * pi * H / 3.0;}int main(){double area;while(scanf("%lf",&area) != EOF){   double lp = 0.0,rp = sqrt(area / pi);   double r = 0.0;   while(lp + eps < rp){      double mid1 = lp + (rp - lp) / 3.0;  double mid2 = rp - (rp - lp) / 3.0;  double value1 = cal(mid1,area);  double value2 = cal(mid2,area);  //printf("value1 = %.2lf  value2 = %.2lf\n",value1,value2);  if(value1 >= value2){     //r = mid2;      rp = mid2;  }  else{  r = mid1;      lp = mid1;  }   }   double R = ( area - pi * r * r ) / ( pi * r );   double H = sqrt(R * R - r * r);   double V = pi * r * r * H / 3.0;   printf("%.2lf\n",V);   printf("%.2lf\n",H);   printf("%.2lf\n",r);}return 0;}


读书人网 >编程

热点推荐