C 寫海盜分金演算法

2022-02-10 20:19:07 字數 1205 閱讀 5254

海盜分金的故事

5個海盜搶到了

100顆寶石,每一顆都一樣的大小和價值連城。

他們決定這麼分:

1。抽籤決定自己的號碼(1,

2,3,

4,5)

2。首先,由

1號提出分配方案,然後大家

5人進行表決,當且僅當半數和超過半數的人同意時,按照他的提案進行分配,否則將被扔入大海喂鯊魚。

3。如果

1號死後,再由

2號提出分配方案,然後大家

4人進行表決,當且僅當半數和超過半數的人同意時,按照他的提案進行分配,否則將被扔入大海喂鯊魚。

4。依次類推

......    

問題:第乙個海盜提出怎樣的分配方案才能夠使自己的收益最大化

),下面就是演算法總結,目的就是讓自己得到1半或以上的票。

演算法:從後向前來推理,

i 海盜分為1-5號,如果只剩下第4,5號海盜兩個人分配,4號則給自己投一票》=50%,條件成立,自己獨吞總金幣,5號什麼也得不到。

ii 3號推出了4號的方案,發一枚金幣給5號,拉一票,因為5號知道在4號的方案中自己得不到所以投3號一票,加上3號投自己的一票》=50%條件成立,3號獲得100-1=99枚金幣。

iii 2號得出3號方案,給4號一枚金幣拉一票,同理,2號票數(1+1)/4>=50%條件成立,獲得100-1=99枚金幣。

iv 1號推斷2號方案中,3號和5號不能獲得金幣,於是給他們各一枚金幣則拉兩票,(1+1+1)/5>=50%條件成立,自己獲得100-1-1=98枚金幣。

從上面的推論可以看出,從後向前依次推,如果上一次分配中獲得金幣的海盜本次分配中將不能獲得金幣。

using

system;

class

pirateassigngold

else

else

}}            

if((

double

)ticket/(

double

)joinnum

<

0.5) 

//總得票數/此次加入分配的海盜數》=50%則此次分配成立,否則失敗

}for

(intn=

1;n<=5;n

++)獲得金幣數 

",n,poke[n]);                

}    

console.readkey();}}

海盜分金2

數學的邏輯有時會導致看來十分怪異的結論。一般的規則是,如果邏輯推理沒有漏洞,那麼結論就必定站得住腳,即使它與你的直覺矛盾。1998年9月,加利福尼亞州帕洛阿爾托的stephen m.omohundro寄給我一道難題,它恰好就屬於這一類。這難題已經流傳了至少十年,但是omohundro對它作了改動,使...

海盜分金幣

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

海盜分金幣

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