有5 名囚犯,編號1~5,讓他們按照編號到裝有100 顆豆子的袋子里摸豆子,每 人都不知道別人摸的數目,但自己摸的時候知道袋子里剩下多少,摸得最多和最少的會 死,跟別人一樣多的兩個都會死,每個人都保證自己不死的前提下讓別人盡量多的人去 死,問編號多少的人存活概率最大?
顯然,為了避免成為受害者,對第n 個人(n>=3)而言,他的最佳策略就是取前面 所有人取的豆數的平均值。先來看看n=3,即第3 個人的情況。在他之前,1 號和2 號 已經摸過了,分別記為A 和B,以下用邏輯表達式的形式來描述3 號所取的豆數C。 C = (A + B) /2 //3 號的初始策略,取前兩個人的平均值
if (A + B + C) > 100 //1 號和2 號加起來取走了超過67 個
{C = 100 - (A + B + 1 + 1)
if C == 1
return 0 //1 號和2 號共取走了97 個,3、4、5 號認命
else
return 1 //3 號安全。C 必定小于A、B 中的一個,并且必定大于D、E} else
{if A<> B
{if C == int(C) //整除
{return 1 //3 號安全。C 必定位于A、B 二者之間} else
{C = int(C)
if abs(A - B) == 1 //1 號、2 號所取的數只相差1 個
return 2 //此時C = min(A,B),因此肯定已經不可能是最多的。后面的4 號、5 號理 論
上還有可能犯錯誤,3 號還存在一線存活的機會
}
else
return 1 //3 號安全。C 必定位于A、B 二者之間
}
else
{
return 2 //此時C =A = B。后面的4 號、5 號理論上還有可能犯錯誤,3 號還存在一 線存活的機會
}
}
上面這段程序完全可以擴展到n>3 的情況,最后我們會發現雖然理論上3 號比較有 利,實際上1 號根本不會給后面的人設計他的機會。所以唯一合理的結果應該是A = B =
C = D=E = 20,也就是全都死翹翹。 當然,以上推理有一個重要的假定,即“很聰明”的定義如下:“如果無論如何我都會 出局,則多一個墊背的比少一個好。”