博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
通过编程计算一个游戏的胜率
阅读量:5832 次
发布时间:2019-06-18

本文共 1586 字,大约阅读时间需要 5 分钟。

以前庙会上经常有一个这样的游戏:

摆摊人拿出四种不同颜色的球,每种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%的概率,确实很难一见。

 

转载地址:http://yeedx.baihongyu.com/

你可能感兴趣的文章
红帽技术开放日:参与开源社区不只有贡献代码这一种方式
查看>>
《Spark GraphX in Action》书评及作者访谈
查看>>
如何定义性能需求
查看>>
一个小米SRE的日常问题排查记录
查看>>
RPC框架的可靠性设计
查看>>
Rust编程语言的核心部件
查看>>
WiFi万能钥匙万玉权:管理应该是“自下而上”
查看>>
Visual Studio最新特性分析
查看>>
Kubernetes集群中的高性能网络策略
查看>>
eBay是如何将Envoy作为边缘代理的:将硬件负载均衡器替换为软件解决方案
查看>>
本地vs云:大数据厮杀的最终幸存者会是谁?
查看>>
Java的内存 -JVM 内存管理
查看>>
antigen简介
查看>>
Angular访问WebApi出现options方法
查看>>
报表富文本使用介绍
查看>>
Java实现定时任务
查看>>
ZIP 算法详解 (转!)
查看>>
solidity_mapping_implementation
查看>>
《编程珠玑,字字珠玑》读书笔记完结篇——AVL树
查看>>
当学术大家遇到技术大拿,如何攻克数据库应用头号难题?数位产学研大咖这样解读...
查看>>