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