在qq群里面看到一道小学的数学题:
原谅我不是机智的小学生了(我相信一定有简单的方法),也嫌弃高等数学的积分方法。。。于是想用程序解决它,不想费脑。于是又想到了一个经典的算法:蒙特卡洛方法,具体可以参照20世纪十大伟大的算法。
这道题目的关键就是求出右上角那个伪三角形的面积。这样问题就迎刃而解了。单独看右边正方形右上的四分之一的正方形,下图的红色框框部分~~
产生两个随机数x和y,范围为[0,5]。然后应用简单的距离比较,看这个随机点是否落在阴影的三角形内。重复这样的过程n次,当重复的次数接近无穷大时,结果越准确。我这里取了100000,其实精度已经达到了0.01。
import random
import math
count = 0
for i in range(100000):
x = random.random() * 5
y = random.random() * 5
if math.sqrt(x**2 + y**2) > 5 and (y < 0.5 * x + 2.5):
count = count + 1
result = 100 - math.pi * 25 - count / 100000.0
print result
就这样,算出的结果是:
21.3247636603
[Finished in 0.2s]
不知道正确答案有没有算错,但是这个方法是很炫的。