海盜瓜分金幣 一道網上流傳的微軟面試題

2021-04-09 00:49:13 字數 3299 閱讀 9173

在乙個孤島上有

5個海盜要瓜分

100塊金幣

.他們按下列方法來瓜分這些掠奪物

:資格最老的海盜提出乙個分配意見

,然後大家對這個分配意見投票表決

.如果有一半的人投了贊成票

,就按照這個方案來劃分

.如果沒有通過

,就殺調這個資格最老的海盜

.然後再由活著的海盜中資格最老的海盜來提出分配方案

,按照同樣的方式來投票

,接受這個方案或者再殺掉這個海盜

.這個過程連續進行

,直到能夠找到乙個大家接受的方案

.如果你是那個老資格的海盜

,你會提出怎樣的方案

?這些海盜不但貪婪

,而且非常有邏輯天分

,並且都有很強的求生慾望

.

應該說

5個海盜每個人都有權利獲得一定數量的金幣

,因此最簡單的計畫就是把

100塊金幣平均分成5份

,每人20塊

.但是

,如果你是那個資格最老的海盜

,提出這樣的分配方案後恐怕就要丟掉性命了

.如果進行平均分配,其他

4個海盜可能認為是公平的

,不過最大的可能是

,他們會覺得每人分

25塊更為公平

.這樣他們在投票的時就會反對你的方案

,殺了你之後由剩下的

4個人重新分配方案.

貪婪是海盜的天性

,不但你在提出平均分配的方案之後會遭受殺身之禍

,下乙個提出這種方案的人也會有同樣下場

.3個人來分豈不是比

4個人來分更好嗎

? 2個人來分不是比

3個人來分更好嗎?

這個問題可以利用遞迴推理來解決

.n個海盜的問題可以通過對

n-1個海盜的狀況進行分析得到解決

.一直這樣進行

,我們可以先考慮只有乙個海盜的情況.

很明顯,

如果只有

1個海盜活下來

,那麼他

1個人就可以獨得

100塊金幣

.如果有

2個海盜會是什麼情況呢

?2個海盜中資格較老的一位要首先提出分配建議

.問題中規定只要半數通過就有效

,也就是說資格較老的海盜自己投一張贊成票就可以使提議通過.因此

,他絲毫不用顧慮另外乙個海盜的想法和感受

.要知道他是乙個貪婪的海盜

,他會獨吞這

100塊金幣

,投票的結果是1比

1,提議生效.

我們繼續分析有

3個海盜的情況.把

3個海盜按照資格從新到老編為1號

,2號,3號

.那麼就應該由

3號海盜來首先提出分配方案.如果

3號海盜提出的方案是自己獨吞

100塊金幣而剩下兩人分文沒有

,2號海盜肯定會反對這個方案

,因為他知道,如果

3號海盜被消滅掉

,只剩下

2個人之後

,自己就可以得到所有的金幣了

,1號海盜是乙個搖擺不定的投票者:在

3號海盜的方案下他一無所獲

,而只有

2個海盜時他依舊一無所獲

.他沒有理由為哪一方投贊成票.

因此如果

3號海盜足夠聰明的話

,他就會收買

1號海盜的選票.他給

1號海盜的金幣不會比應付的多出乙個子兒

. 他的分配方案是給

1號海盜

1塊金幣,給

2號海盜

0塊金幣

,剩下的

99塊金幣就歸

3號海盜所有

.1號海盜知道,如果

3號海盜的方案沒有通過而被殺死

,自己肯定是分文不得

,現在雖然只能得到

1塊金幣

,但總是聊勝於無

,因此會投

3號海盜的贊成票

.這樣的投票結果是2比

1,方案獲得通過.

現在我們來看看有

4個海盜時的情況

,4是乙個偶數

,因此資格最老的海盜除了自己的一票

,如果還能爭取到一張選票

,他的方案就可以獲得通過

.他所面臨的問題是

,購買其他

3個海盜中哪乙個人的選票最划算呢?

回過頭在看看

3個海盜時的情況

,如果只有

3個海盜

,2號海盜肯定就會一無所獲.因此

,4號海盜的方案就是購買

2號海盜的選票.

只要有了

2號選票的選票在手

,4號海盜就不用擔心

3號海盜和

1號海盜的想法了

.4號海盜會給

1號海盜

0塊金幣

,2號海盜

1塊金幣

,3號海盜

0塊金幣

,而自己獨拿

99塊金幣.

現在我們看到了問題的實質

,在每乙個例子中

,資格最老的海盜都必須「購買

」自己需要的選票

,並要以盡可能低的**

,然後剩餘的金幣都歸自己.

現在我們來看看

5個海盜時的情景

,也就是我們要解決的這個問題.你是

5號海盜

,你需要

3張選票

,1張你自己的

,2張別人的

.因此你需要給

4個海盜中的

2個海盜一點好處

,應該是1號和

3號

.因為如果你

(5號海盜

)被殺的話,他們

2個將會一無所獲

.只要你

「給他們點東西

」,他們就會投你的贊成票.因此

,你的方案應該是給

4號海盜

0塊金幣

,3號海盜

1塊金幣

,2號海盜

0塊金幣

,1號海盜

1塊金幣

.剩下的

98塊金幣就歸你了

. 當然

,這只是在理想情況下才能出現的情景

,如果海盜們以朋友關係為紐帶形成了一定的投票聯盟

,那麼就不會出現這種情況了

,即使是沒有投票聯盟

,也還是很難確定解決方案

.當你拿走大多數金幣而其他海盜只得到一塊或分文沒有時

,有什麼樣的海盜會坦然接受

?恐怕他們早已把你開槍打死

,由剩下來的人重新分配了

.

海盜分金幣

首先,把這個問題轉換為乙個遞迴的演算法問題,描述為,如果我知道了上一家的分法,我如何能夠使我的利益最大化呢?現假定有5個人分,金幣總數是100,那麼第二個人的分法是1,1,0,98,那麼第乙個人需要的就是拉攏分的最少的兩人,然後給他們多乙個金幣,這樣就可以取得他們的支援了,所以第乙個人的分法是2,0...

海盜分金幣

問題描述 有n個海盜,得到了m個金幣。他們決定將之瓜分。分的方法是站成一排,從1號到n號海盜依次提出方案。如果提出的方案得到的支援人數比例超過q 0 q 100 那麼就通過方案,進行分配,提出方案的海盜也有投票權。否則就把提出方案的人扔到海浬喂鯊魚。海盜都是精明的,他們能夠分析出如何最大化自己的利益...

海盜分金幣

有5個海盜,獲得了100枚金幣,他們約定乙個分配方案.商議方式 1.有5個海盜輪流提出分配方案 2.如果超出半數海盜 包括提出者 同意該方案,則按照該方案分配 3.如果同意該方案的人數 包括提出者 小於等於半數,則提出者要被扔到海浬餵魚,剩餘海盜繼續商議分配 4.海盜們是絕對理性的,以自己盡可能獲得...