http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2416
推导过程如下:
首先,题意是求切完西瓜后两半中大的。如果不是对半切,那么:
其中,半椭球体积易算:
而,积分体积推导过程如下:
在多元函数积分学中,三重积分是用于计算任意(三元)函数的体积的,但此次不采用三重积分或简化后的三重积分(二重积分),采用一个一重积分,即在物理中广泛运用的积分简化思想,“元素法”。
首先,令
化简:
带入
同除,整理得:
由椭圆面积公式:
(a不是题目中的a,b也不是题目中的b)
知:
又知:
故:
积分得:
故:
另注意一点,如果h>=b,表示没有切到,故:
题外话:为何这么做?
由积分定义及其理解可知,一个立体的体积是连续的平面片面积之和,也印证了,无穷多个0相加,结果可以是任意值。
原来的那个图丑死了,果断上matlab
综上分析,不难得出以下代码:
#include <iostream> #include <cstdio> #include <cmath> using namespace std; #define pi acos(-1.0) int main() { ios::sync_with_stdio(false); //freopen("E:\\data1.in","r",stdin); //freopen("E:\\out1.txt","w",stdout); int t; cin>>t; for (int i=1; i<=t; ++i) { double a,b,h; cin>>a>>b>>h; if (h>=b) { printf("Case %d: %.3lf\n",i,4.0*pi*a*b*b/3); } else { double s = 2.0*pi*a*b*b/3+pi*a*h*(b-h*h/(3*b)); printf("Case %d: %.3lf\n",i,s); } } }