Fruit Ninja II (微积分)

来源:互联网 发布:武汉天融信网络 编辑:程序博客网 时间:2024/05/16 14:37



题目:过z轴上一点,平行于x0y平面的平面分椭球为两部分,求出最大的部分;

对于点在椭球内的点,积出多与半个椭球的体积再加上半个椭球的体积即题目要求的答案:

对于积分,先积出平行于x0y平面的界面的面积,然后再积出球体的体积:

最后的式子:V=2/3*π*a*b*b+π*a*b*(h-h*h*h/(3*b*b));

注意:π的值要求精度较高,

代码:

#include<stdio.h>#include<math.h>#define PAI acos(-1)//π的值要求精度比较高int main(){    int t,i,a,b,h;    double S;    scanf("%d",&t);        for(i=1; i<=t; i++)        {            scanf("%d%d%d",&a,&b,&h);            printf("Case %d: ",i);            S=4.0/3*PAI*a*b*b;            if(h>=b)                printf("%.3lf\n",S);            else            {                S=S/2+PAI*a*b*(h-(h*h*h)/(3.0*b*b));//积分出来的公式                printf("%.3lf\n",S);            }        }    return 0;}



0 0
原创粉丝点击