最近找工作看了許多面經,其中看到了重複出現多次的問題:
使用概率論計算π因此,查詢並推導了如下可兩種方法,具體如下:
目錄
1.投針法:
1.1實驗資料
1.2python模擬程式
2.圓周法
2.1python模擬程式
18世紀,布豐提出以下問題:設我們有乙個以平行且等距木紋鋪成的地板(如圖),現在隨意拋一支長度比木紋之間距離小的針,求針和其中一條木紋相交的概率。並以此概率,布豐提出的一種計算圓周率的方法——隨機投針法。這就是蒲豐投針問題(又譯「布豐投針問題」)。這一方法的步驟是:l
1) 取一張白紙,在上面畫上許多條間距為a的平行線。
2) 取一根長度為l(l≤a) 的針,隨機地向畫有平行直線的紙上擲n次,觀察針與直線相交的次數,記為m。
3)計算針與直線相交的概率
令事件a=『針與某條平行線相交』,那麼針與平行線相交的情況也就上圖的幾種形式,設h為針重點到最近的一條平行線的距離,且線相交的角度為a,針與平行線的交點到中點的距離為k,那麼明顯的有:
試驗者時間
投擲次數
相交次數
圓周率估計值
wolf
2023年
3.1596
smith
2023年
1218.5
3.1554
c.de morgan
2023年
382.5
3.137
fox
2023年
3.1595
lazzerini
2023年
3.1415929
reina
2023年
3.1795
可以看到程式求得π=3.1413088739855306,利用更大的實驗次數可以得到更加精確的π值'''
****************************************===
@author: renjiaxin
@time: 2018/8/30 0030 16:33
****************************************===
'''import random
import math
def puf(n, l=0.6, a=1):
''':param l: 針的長度
:param a: 橫線之間的間距
:param n: 實驗的次數
:return: 圓周率π
'''# 相交次數
m = 0
for i in range(n):
# 針的中點與最近的線的距離
dis = random.uniform(0, a / 2)
# 針與線相交的度數
deg = random.uniform(0, math.pi)
if dis <= (l / 2) * math.sin(deg):
m += 1
return (2 * l * n) / (a * m)
pi = puf(1000000)
該方法利用乙個正方形的內切圓,用隨機數生成隨機點,落在圓內的概率是圓面積與正方形面積的比。具體如下:設圓的半徑為r,面積為s0;則正方形邊長d=2r,面積為s1;那麼事件a=『隨機點落在圓內』的概率p(a)=s0/s1,則有:
可以看到程式求得π=3.14187976,利用更大的實驗次數可以得到更加精確的π值'''
****************************************===
@author: renjiaxin
@time: 2018/8/30 0030 14:16
****************************************===
'''import random
def pai(x):
''':param x: 實驗次數
:return: 圓周率π
'''cir = 0
for i in range(x):
a = random.uniform(0, 1)
b = random.uniform(0, 1)
if a**2 + b**2 <= 1:
cir += 1
return 4 * cir / x
pi = pai(1000000)
7 15 計算圓周率
7 15 計算圓周率 15 分 根據下面關係式,求圓周率的值,直到最後一項的值小於給定閾值。2 1 1 3 2 3 5 3 3 5 7 n 3 5 7 2 n 1 輸入格式 輸入在一行中給出小於1的閾值。輸出格式 在一行中輸出滿足閾值條件的近似圓周率,輸出到小數點後6位。輸入樣例 0.01 輸出樣例...
7 15 計算圓周率
學到翁愷老師 c語言程式設計 第八周了,來pta做點習題練習 題目是 用圓周率的關係式,求圓周率的值,直到最後一項的值小於給定閾值。2 1 3 1 3 5 2 3 5 7 3 3 5 7 2n 1 n 輸入格式 輸入在一行中給出小於1的閾值。輸出格式 在一行中輸出滿足閾值條件的近似圓周率,輸出到小數...
《計算圓周率》python
題目 歷史上有許多計算圓周率pai的公式,其中,格雷戈里和萊布尼茨發現了下面的公式 pai 4 1 1 3 1 5 1 7 這個公式簡單而優美,但美中不足,它收斂的太慢了。如果我們四捨五入保留它的兩位小數,那麼 累積1項是 4.00 累積2項是 2.67 累積3項是 3.47 請你寫出它累積100項...