首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

POJ 3737 UmBasketella 3分

2012-09-16 
POJ3737UmBasketella三分来源:http://poj.org/problem?id3737题意:给你一个圆锥,圆锥面积给出,问你圆锥的

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;}


热点排行