BSG白山极客挑战赛 - C B君的圆锥


BSG白山极客挑战赛 
B君的圆锥

B君要用一个表面积为S的圆锥将白山云包起来。

B君希望包住的白山云体积尽量大,B君想知道体积最大可以是多少。

注意圆锥的表面积包括底面和侧面。
Input
一行一个整数,表示表面积S。(1 <= S <= 10^9)
Output
一行一个实数,表示体积。
Input示例
8
Output示例
1.504506

----------------------------------------------------------------------------------------------------------------------------------

思路转自:http://blog.csdn.net/bmamb/article/details/51468740

思路 :

    一道高中的计算几何,运用高中数学不等式可以直接计算出一个关于s的方程,求解即可。

   求解过程如下:设表面积为s,体积为v,底面圆半径为r,圆锥的母线为L。pi 为 π。

   可以知道s = pi * r * r(底面积) + pi * r * L(扇形面积); -->可以求出L关于r的方程  :L = s / (pi * r) - r;

    然后v = pi * r * r * sqrt(L * L - r * r)/ 3;然后把上述L带入可以得到

                                          v = r * sqrt( s * s - 2 * pi *  r * r * s) / 3;

    然后开始化简最后得到的那个v方程,用不等式 (x + y) / 2  >= sqrt( x * y);  上述v方程把r带入的话得到下方程

                                         v = sqrt(r  *  r   *(s * s - 2 * pi *  r * r * s));

    现在看那个根号里面的式子,最好写下来,这样看着真丑~~~~~ 不正好是x * y的形式么把括号里面的东西看成y的话,

    然后外面有个r * r  如果配方成 2 * pi *  r * r * s  那么(x + y) / 2不就正好可以消去s也是最大值了 配一个sqrt(2 * pi * s);然后化简

   化简得:                     v = s * sqrt(pi * s *2 )/ (12 * pi) (就这样啊,坑啊!~ !~!~!)

---------------------------------------------------------------------------------------------------------------------------------

个人的一些解法总结:

以下的 r 都表示 为  底面圆的 半径:

以上是的思路是转自他人的博客的,该推过程确实是很头疼,不过这道题还有其他解法,将推到出来的式子中的 r ^ 2 当做 x ,那么就会得到 一元二次 方程 ,然后解一元二次方程就行了,还有一种方法是 对 r 从 0 到 最大值用 三分法不断缩小,这样也是可以求解出来的。这两种方法就留给大家自己去尝试。我就不写题解了。

在我看来,前两种都可以认为是数学方法,第三种是  计算机方法(⊙o⊙), 不过数学也是很重要的。

加上几个不等式变换的公式


附上代码:

#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <cmath>
#include <map>
#define LL long long
#define MAX_N 50000
#define PI 3.1415926

using namespace std;

int main()
{
	double n;
	while(cin >> n)
	{
		printf("%lf\n",n * sqrt(n * PI / 2) / (6 * PI));
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值