面试某公司的时候,被问到这样一个问题,感觉很有趣。
如何估算圆周率π的值?
思路:通过蒙特卡洛算法,想象一个正方形内嵌了一个1/4圆,
设想扔出的飞镖,根据每次落在圆内的飞镖的概率值占比来估算。
使用cnt变量代表扔出的飞镖次数,actual变量代表落在圆内的次数,
则actual/cnt表示1/4圆的面积,进而可以换算出π
代码如下:
import random
def Solution():
r = 2
N = 1000000
actual = 0
cnt = 0
for i in range(N):
x = random.uniform(0,r)
y = random.uniform(0,r)
if x * x + y * y <= r * r:
actual += 1
cnt += 1
return actual * 1.0 / cnt * 4
print('pai={}'.format(Solution()))