题目链接
http://poj.org/problem?id=3737
题意
给出一个圆锥体的表面积,求出最大体积,要求精度1e-2
思路
推一下公式
S=πr2+πrr2+h2−−−−−−√
于是推出:
h=S2π2r2−2Sπ−−−−−−−−√
带入体积公式:
V=πr2h3=S2r2−2πSr4√3
可以看出
V
随
代码
C++能AC但是G++会WA
#include <iostream>
#include <cmath>
#include <stdio.h>
using namespace std;
inline int in() {int x; scanf("%d", &x); return x;}
#define pr(x) {cout << #x << ' ' << x << endl;}
#define pi (3.141592653589793)
double S;
double value(double r) {
return sqrt(S * S * r * r - 2 * pi * S * r * r * r * r) / 3.0;
}
int main() {
while (scanf("%lf", &S) != EOF) {
double R, l = 0, r = sqrt(S / (2 * pi)), m;
while (r - l > 1e-6) {
double mid1 = l + (r - l) / 3.0;
double mid2 = r - (r - l) / 3.0;
if (value(mid1) > value(mid2)) {
r = mid2;
} else {
l = mid1;
}
}
double h = sqrt((S * S / (pi * pi * r * r)) - (2 * S / pi));
double v = pi * r * r * h / 3.0;
printf("%.2lf\n%.2lf\n%.2lf\n", v, h, r);
}
return 0;
}