sdut 2416:Fruit Ninja II(第三届山东省省赛原题,数学题)

本文介绍了一个基于FruitNinjaII的游戏数学问题,玩家需要计算特定切痕下被切水果两部分的体积。文章通过简化问题背景,将实际游戏场景抽象为数学模型,并给出了解决该问题的代码实现。

 

Fruit Ninja II

Time Limit: 5000MS Memory limit: 65536K

题目描述

  

Have you ever played a popular game named "Fruit Ninja"?

Fruit Ninja (known as Fruit Ninja HD on the iPad and Fruit Ninja THD for Nvidia Tegra 2 based Android devices) is a video game developed by Halfbrick. It was released April 21, 2010 for iPod Touch and iPhone devices, July 12, 2010 for the iPad, September 17, 2010 for Android OS devices. Fruit Ninja was well received by critics and consumers. The iOS version sold over 200,000 copies in its first month. By March 2011 total downloads across all platforms exceeded 20 million. It was also named one of Time magazine's 50 Best iPhone Apps of 2011.

 

"Swipe your finger across the screen to deliciously slash and splatter fruit like a true ninja warrior. Be careful of bombs - they are explosive to touch and will put a swift end to your juicy adventure!" - As it described on http://www.fruitninja.com/, in Fruit Ninja the player slices fruit with a blade controlled via a touch pad. As the fruit is thrown onto the screen, the player swipes their finger across the screen to create a slicing motion, attempting to slice the fruit in parts. Extra points are awarded for slicing multiple fruits with one swipe, and players can use additional fingers to make multiple slices simultaneously. Players must slice all fruit; if three pieces of fruit are missed the game ends. Bombs are occasionally thrown onto the screen, and will also end the game should the player slice them.

Maybe you are an excellent player of Fruit Ninja, but in this problem we focus on something more mathematically. Consider a certain slicing trace you create on the touch pad, you slice a fruit (an apple or a banana or something else) into two parts at once. Can you figure out the volume of each part?

Impossible task? Let us do some simplification by define our own Fruit Ninja game.
In our new Fruit Ninja game, only one kind of fruit will be thrown into the air - watermelon. What's more, the shape of every watermelon is a special Ellipsoid (details reachable at http://en.wikipedia.org/wiki/Ellipsoid) that it's polar radius OC is always equals to it's equatorial radius OB. Formally, we can get this kind of solid by revolving a certain ellipse on the x-axis. And the slicing trace the player created (represented as MN in Illustration III) is a line parallel to the x-axis. The slicing motion slice the watermelon into two parts, and the section (shown as the dark part in Illustration III) is parallel to plane x-O-y.

Given the length of OA, OB, OM (OM is the distance between the section and plane x-O-y), your task is to figure out the volume of the bigger part.


 

输入

 

There are multiple test cases. First line is an integer T (T ≈ 100), indicating the number of test cases.

For each test case, there are three integers: a, b, H, corresponding the length of OA, OB, OM. You may suppose that 0 < b <= a <= 100 and 0 <= H <= 100.

 

输出

 

Output case number "Case %d: " followed by a floating point number (round to 3) for each test case.

 

 

示例输入

4
2 2 0
2 2 1
2 2 2
2 2 3

示例输出

Case 1: 16.755
Case 2: 28.274
Case 3: 33.510
Case 4: 33.510

提示

 In case 4, H is larger than b, which simply represent a miss.

http://www.fruitninja.com/
http://en.wikipedia.org/wiki/Fruit_Ninja
http://en.wikipedia.org/wiki/Ellipsoid

来源

 2012年"浪潮杯"山东省第三届ACM大学生程序设计竞赛
 
  数学题
  运用高数中的三重积分演算出求椭圆台的体积公式。然后直接套公式过。
  模拟赛的时候是帅爷做出来的,唉,高数不好的孩子只能远远的看着啊!数学真的很重要,有时间一定要好好补补。
  注意OM>=OB的情况,不需要计算椭圆台的体积,直接输出整个椭圆球体的体积。
  代码:
 1 #include <iostream>
 2 #include <stdio.h>
 3 #include <cmath>
 4 const double PI = acos(-1);
 5 using namespace std;
 6 
 7 int main()
 8 {
 9     int T;
10     cin>>T;
11     for(int i=1;i<=T;i++){
12         double a,b,m;
13         cin>>a>>b>>m;
14         double Vsum = 4*PI*a*b*b/3/2;
15         double Vsma = PI*a*b*(m-m*m*m/(3*b*b));
16         if(m>=b)
17             printf("Case %d: %.3lf\n",i,2*Vsum);
18         else
19             printf("Case %d: %.3lf\n",i,Vsum+Vsma);
20     }
21     return 0;
22 }
23 
24 
25 /**************************************
26     Problem id    : SDUT OJ J 
27     User name    : Miracle 
28     Result        : Accepted 
29     Take Memory    : 540K 
30     Take Time    : 0MS 
31     Submit Time    : 2014-04-27 11:53:58  
32 **************************************/

 

Freecode : www.cnblogs.com/yym2013

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值