本文主要是介绍应届生入职练手习题-蒙特卡洛算法(1.5H),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
应届生入职练手习题
[编辑] 模拟射击,根据命中概率来求PI
要求:假设有一个半径为1000的圆形靶子(具体单位没有意义,不用写),我们随意对其进行射击,那么,统计所有落在圆形外接正方形中的弹着点,可以很容易得知:命中这个圆形靶子的概率是圆形的面积与外接方形面积的比
目的:检验编程风格和实现效率
要解这个题目就得有对蒙特卡洛算法的了解,原理如下
在数值积分法中,利用求单位圆的1/4的面积来求得Pi/4从而得到Pi。单位圆的1/4面积是一个扇形,它是边长为1单位正方形的一部分。只要能求出扇形面积S1在正方形面积S中占的比例K=S1/S就立即能得到S1,从而得到Pi的值。怎样求出扇形面积在正方形面积中占的比例K呢?一个办法是在正方形中随机投入很多点,使所投的点落在正方形中每一个位置的机会相等看其中有多少个点落在扇形内。将落在扇形内的点数m与所投点的总数n的比m/n作为k的近似值。P落在扇形内的充要条件是x^2+y^2<=1。(最后这个充要条件其实用的是勾股定理,一开始让我迷惑了有快半小时)
代码实现如下:
import java.util.Scanner;public class MonteCarlomethod {public static void mai
这篇关于应届生入职练手习题-蒙特卡洛算法(1.5H)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!