#分蛋糕問題
有一家有兩個孩子,哥哥和弟弟,兩人都很喜歡吃蛋糕,每次分蛋糕的時候,哥哥都會把一把刀插在蛋糕的一端,然後隨機地切下兩刀,插著刀的這一部分歸哥哥,剩下的歸弟弟,那麼問題來了,這樣的分配方式看似公平,但是到底真正公平嗎?
首先我們採用隨機模擬的方式來分析一下問題,將蛋糕分成360度,設定一開始哥哥插刀的位置為0度,之後切蛋糕的角度分別為x,y,不妨設y > x。那麼弟弟分到的蛋糕就是y - x的部分,哥哥分到的蛋糕就是360 - y + x的部分,我們使用python模擬10_000,100_000,1000_1000,1_1000_000次分蛋糕的結果,橫軸為0到359度的分到的蛋糕大小,縱軸為分到相應大小蛋糕的概率。結果如下圖(綠線為弟弟,紅線為哥哥):
具體**如下:
不難看出,顯然每次都是哥哥佔了便宜。import matplotlib.pyplot as plt
import random
n=1000000
valuea=
valueb=
pa=pb=
for i in range(n):
tmp1=random.random()*360
tmp2=random.random()*360
if tmp1>tmp2 :
tmp=round(tmp1-tmp2)
else:
tmp=round(tmp2-tmp1)
for i in range(360):
plt.plot(range(360),pa,'g-',range(360),pb,'r-')
plt.show()
下面我們從概率的方式分析下這個問題,每次分蛋糕時,哥哥分到的蛋糕大於弟弟可以寫成如下不等式:
∣
360−y+
x∣>∣y
−x∣|360-y+x|>|y-x|
∣360−y
+x∣>∣y
−x∣,
那麼可以轉化為幾何概率的問題,在座標軸上作出
y =x
+180
y=x+180
y=x+18
0和y =x
可以看出,哥哥大於弟弟的概率是弟弟大於哥哥的概率的3倍,所以說,學好概率很重要啊,不然以後吃虧了都不知道。
具體**如下:
故事的後續:import numpy as np
import matplotlib.pyplot as plt
x=range(180,360)
x=np.array(x)
x1=range(0,180)
x1=np.array(x1)
plt.axis([0,360,0,360])
plt.plot(x,x-180,color='red',linestyle='-',label=r'$y=x-180$')
plt.plot(x1,x1+180,color='green',linestyle='-',label=r'$y=x+180$')
plt.legend(loc='upper left',frameon=false)
plt.show()
明面上是精通數學的哥哥佔了便宜,但是多年以後,因為吃了太多的蛋糕,身材略胖的哥哥並沒有找到女朋友,弟弟邪魅一笑:「嘻,真正的贏家其實是我!」
分蛋糕問題
剛才看到2個人輪流分蛋糕,怎麼分最公平。注意是輪流分,並且每個人都想自己的蛋糕分的最多。有人說平分不就可以了,但比如先拿蛋糕的人會給自己切最大塊,這就不公平了,所以才會有此問題產生。2個人分蛋糕的乙個做法是乙個人切蛋糕,另乙個拿蛋糕,因為切的人後拿蛋糕,所以他就把蛋糕對半切成兩塊,先拿的人拿哪一塊都...
二分 分蛋糕問題
題意 n種蛋糕,每個半徑給出,要分給f 1個人,要求每個人分的體積一樣 形狀可以不一樣 而且每人只能分得一種蛋糕 不能多種蛋糕拼在一起 求每人最大可以分到的體積。輸入 3 3 34 3 3 1 24 510 5 1 4 2 3 4 5 6 5 4 2 輸出 25.1327 3.1416 50.265...
小明分蛋糕問題c語言求解
問題描述 小明今天生日,他有n塊蛋糕要分給朋友們吃,這n塊蛋糕 編號為1到n 的重量分別為a1,a2,an。小明想分給每個朋友至少重量為k的蛋糕。小明的朋友們已經排好隊準備領蛋糕,對於每個朋友,小明總是先將自己手中編號最小的蛋糕分給他,當這個朋友所分得蛋糕的重量不到k時,再繼續將剩下的蛋糕中編號 最...