应该是有公式的,本弱不会,用的三分法。 这是个单峰函数,体积先随着半径的增长而变大,然后变小。 此代码在poj上选择用C++提交,不要用G++ #include <cmath> #include <cstdio> using namespace std; const double eps = 1e-8; #define PI acos(-1.0) double S; double GetH(double r){ double a = S/PI/r - r; a = a*a - r*r; return sqrt(a); } double GetV(double r, double h){ return PI*r*r*h/3; } int main(){ while(scanf("%lf", &S) != EOF){ double l, r, lm, rm, lV, rV; l = 0.00001; r = sqrt(S/PI/2); while(r-l > eps){ lm = (r-l)/3 + l; rm = (r-l)/3*2 + l; lV = GetV(lm, GetH(lm)); rV = GetV(rm, GetH(rm)); if(lV < rV) l = lm; else r = rm; } double h = GetH(r); double V = GetV(r, h); printf("%.2lf\n%.2lf\n%.2lf\n", V, h, r); } return 0; }
08-05