通过编程计算一个游戏的胜率
以前廟會上經常有一個這樣的游戲:
擺攤人拿出四種不同顏色的球,每種5個,然后放在一個袋子里,讓觀眾摸出十個來,然后按顏色分類,統計每種顏色的個數,根據不同組合可以拿到不同的獎品,但如果是1234或3322這兩種組合的時候,則需要給擺攤人幾塊錢。
其實一看到這個游戲就大致猜到這是個概率游戲了,1234和3322絕對是該規則下出現的較大的兩個概率,擺攤人則無需使用任何作弊手段。但這兩種組合的概率是多大,到一直沒有細考慮過。其實上學的時候嘗試算過,但當時數學沒學好,愣是沒算出來,便很快放棄了,現在上幾年班后就自然更算不出來了。今天編了個小程序簡單的算了個粗略的結果:
程序如下:
?1?????class?Program?2?????{
?3?????????static?void?Main(string[]?args)
?4?????????{
?5?????????????var?query?=?from?i?in?Enumerable.Range(0,?100?*?10000)
?6?????????????????????????let?result?=?Test()
?7?????????????????????????group?result?by?result?into?g
?8?????????????????????????let?value?=?new?{?Result?=?g.Key.ToString("0000"),?Count?=?(double)g.Count()?/?10000?}
?9?????????????????????????orderby?value.Count?descending
10?????????????????????????select?value;
11?
12?????????????foreach?(var?item?in?query)
13?????????????{
14?????????????????Console.WriteLine(item);
15?????????????}
16?????????}
17?
18?????????static?Random?rnd?=?new?Random();
19?????????static?int?Test()
20?????????{
21?????????????var?numbers?=?Enumerable.Range(0,?20).OrderBy(_?=>?rnd.Next()).Take(10);????//隨機抽取十個
22?
23?????????????var?query?=?from?n?in?numbers????????//統計每種花色的張數
24?????????????????????????let?color?=?n?%?4
25?????????????????????????let?value?=?n?/?4
26?????????????????????????group?value?by?color?into?g
27?????????????????????????select?g.Count();
28?
29?????????????return?query.OrderBy(i?=>?i).Aggregate(0,?(value,?i)?=>?value?*?10?+?i);
30?????????}
31?????}
該程序的輸出結果如下:
?{ Result = 2233, Count = 32.5512 }
?{ Result = 1234, Count = 32.4215 }
?{ Result = 1333, Count = 10.8416 }
?{ Result = 2224, Count = 10.766 }
?{ Result = 1225, Count = 3.2447 }
?{ Result = 0334, Count = 3.2204 }
?{ Result = 1144, Count = 2.0338 }
?{ Result = 0244, Count = 1.6388 }
?{ Result = 1135, Count = 1.6385 }
?{ Result = 0235, Count = 1.3121 }
?{ Result = 0145, Count = 0.3284 }
?{ Result = 0055, Count = 0.003 }
也就是說,3322和1234這兩種組合將近占了65%,只要擺攤人把1333和2224這兩種組合設置為比較小的獎項,基本上就穩賺不賠了,而最大獎0055,只有0.003%的概率,確實很難一見。
?
轉載于:https://www.cnblogs.com/TianFang/archive/2012/02/06/2340684.html
總結
以上是生活随笔為你收集整理的通过编程计算一个游戏的胜率的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: eclipse快速定位到错误处
- 下一篇: 解决Based on configure