尤拉計劃547:帶洞正方形內任意點間距離
譯文來自 http://pe-cn.github.io/547/
在長方形中(均勻地)隨機選擇兩個點,可以算出兩點間距離的期望值。
例如,在單位正方形中任意兩點間距離的期望約為0.521405,而在寬為2長為3的長方形中任意兩點間距離的期望約為1.317067。
從邊長為整數n ≥ 3、含有n2個單位正方形的大正方形中,去掉一個由x × y個單位正方形組成的長方形(1 ≤ x,y ≤ n - 2),我們稱剩下的圖形為邊長為n的帶洞正方形。
當n = 3時,只有一種帶洞正方形:
當n = 4時,不考慮旋轉和翻轉,你能找出9種不同的帶洞正方形:
記S(n)是所有可能的邊長為n的帶洞正方形中任意兩點間距離的期望之和。這裡的任意兩點必須在大正方形去除內部長方形後剩下的區域,也即上圖中的灰色區域。
例如,S(3) = 1.6514而S(4) = 19.6564,均保留小數點後4位小數。
求S(40)並保留小數點後4位小數。
先用小格子模擬一下:
from math import sqrt
def e547(n): #n<=30
dist=0.0
for i in range(n):
for j in range(n):
for i1 in range(n):
for j1 in range(n):
dist+=sqrt((j-j1)**2+(i-i1)**2)
return dist/(n**5) #n**4條線,n是邊長的比例尺
執行結果為
>>> print(e547(10))
0.5186872221213251
>>> print(e547(20))
0.520756536423531
>>> print(e547(30))
0.5211214715615858
再來帶洞的邊長為3的。
def e547(n,m): #n<=30
dist=0.0
ct=0
for i in range(n*m):
for j in range(n*m):
for i1 in range(n*m):
for j1 in range(n*m):
#if (not (i in range(n,n*2) and j in range(n,n*2))and not (i1 in range(n,n*2) and j1 in range(n,n*2)) ):
if (not (i >=n and i<n*2 and j >=n and j<n*2)and not (i1 >=n and i1<n*2 and j1 >=n and j1<n*2) ):
ct+=1
dist+=sqrt((j-j1)**2+(i-i1)**2)
return dist/(ct*n)
>>> print(e547(10,3))
1.6505096708301576
>>> print(e547(20,3))
1.651145010385864
相關文章
- 尤拉計劃700:尤拉幣
- 尤拉計劃622:洗牌
- 尤拉計劃698:123數
- 尤拉計劃696:麻將
- 尤拉計劃719:拆分數
- 尤拉計劃699:三腳數
- 尤拉計劃706:三象數
- 尤拉計劃718:不可達數
- 尤拉計劃686:2的冪
- 尤拉計劃715:六元組
- 尤拉計劃709:偶數袋
- 尤拉計劃708:你只要2
- 尤拉計劃712:指數差
- 尤拉計劃749:近似冪和
- 尤拉計劃739:和的和
- 尤拉計劃751:串聯重合
- 尤拉計劃745:平方和
- 尤拉計劃717:取模公式之和公式
- 尤拉計劃722:慢收斂系列
- 尤拉計劃695:隨機長方形隨機
- 尤拉計劃694:立方滿因數
- 尤拉計劃725:數位之和數
- 尤拉計劃710:1百萬會員
- 尤拉計劃723:畢達哥拉斯四邊形
- 尤拉計劃697:隨機衰減序列隨機
- 尤拉計劃713:圖蘭熱水系統
- 尤拉計劃711:二進位制黑板
- 尤拉計劃748:倒丟蕃多方程
- 尤拉計劃747:三角披薩
- 計算地圖中兩點之間的距離地圖
- 尤拉計劃657:不完整的單詞
- 尤拉計劃721:無理數高次冪
- 尤拉計劃701:隨機連線區域隨機
- 尤拉計劃714:兩種數位的數
- 微信小程式——計算2點之間的距離微信小程式
- 尤拉計劃658:不完整的單詞(2)
- 尤拉計劃735:2n^2的因數
- C語言:使用函式計算兩點間的距離C語言函式