藍橋杯決賽真題——古代賭局

俗話說:十賭九輸。因爲大多數賭局的背後都藏有陰謀。不過也不盡然,有些賭局背後藏有的是:“陽謀”。

有一種賭局是這樣的:桌子上放六個匣子,編號是1至6。多位參與者(以下稱玩家)可以把任意數量的錢押在某個編號的匣子上。

所有玩家都下注後,莊家同時擲出3個骰子(骰子上的數字都是1至6)。輸贏規則如下:

1. 若某一個骰子上的數字與玩家所押注的匣子號相同,則玩家拿回自己的押注,莊家按他押注的數目賠付(即1比1的賠率)。

2. 若有兩個骰子上的數字與玩家所押注的匣子號相同,則玩家拿回自己的押注,莊家按他押注的數目的2倍賠付(即1比2的賠率)。

3. 若三個骰子上的數字都與玩家所押注的匣子號相同,則玩家拿回自己的押注,莊家按他押注的數目的6倍賠付(即1比6的賠率)。

4. 若玩家所押注匣子號與某個骰子示數乘積等於另外兩個骰子示數的乘積,則玩家拿回自己的押注,莊家也不賠付(流局)。

5. 若以上規則有同時滿足者,玩家可以選擇對自己最有利的規則。規則執行後,則莊家收穫所有匣子上剩餘的押注。

乍一看起來,好像規則對玩家有利,莊家吃虧。但經過大量實戰,會發現局面很難說,於是懷疑是否莊家做了手腳,

莊家則十分爽快地說:可以由玩家提供骰子,甚至也可以由玩家來投擲骰子。

你的任務是:通過編程模擬該過程。模擬50萬次,假定只有1個玩家,他每次的押注都是1元錢,其押注的匣子號是隨機的。

再假定莊家有足夠的資金用於賠付。最後計算出莊家的盈率(莊家盈利金額/押注總金額)。

【輸入、輸出格式要求】

程序無輸入,程序運行輸出莊家的盈率,四捨五入保留到小數後3位。

publicclassMain

{

    publicstaticvoid main(String args[])

    {

       int a,b,c,d,sum=0;

       for(int i=0;i<500000;i++)

       {

           a=(int) (Math.random()*6)+1;   //玩家壓的數

           b=(int) (Math.random()*6)+1;   //莊家投的三個骰子

           c=(int) (Math.random()*6)+1;

           d=(int) (Math.random()*6)+1; 

           if(a==b&&a==c&&a==d)  //如果玩家和莊家三個數都相等

           {

              sum-=6;

           }

           elseif((a==b&&a==c)||(a==c&&a==d)||(a==b&&a==d))//如果玩家和莊家兩個數相等

           {

              sum-=2;

           }

         elseif(a==b||a==c||a==d)  //如果玩家和莊家一個數相等

           {

              sum-=1;

           }

         elseif((a*b==c*d)||(a*c==b*d)||(a*d==b*c))

           {

              sum-=0;

           }else

           {

              sum+=1;

           }

       }

        

       System.out.printf("%.3f",sum/500000f);

    } 

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章