于洪涛分享 http://blog.sciencenet.cn/u/mcuwork 嵌入式硬件爱好者 2010级研究生

博文

工科男的自娱自乐-计算升级中“革命”的概率

已有 5169 次阅读 2012-7-25 20:18 |个人分类:生活点滴|系统分类:生活其它| 升级, 自娱自乐, 工科男

暑假来临,虽然严格意义上说是没有假期的,但是实验室的气氛还是相对轻松了很多。
炎炎夏日,没有空调,只有一个小吊扇的宿舍很是燥热。
热得睡不着,大家便想着娱乐一下,对于“屌丝”一族的好学生来说,打牌和打球是再合适不过了!
前一阵子流行“拱猪”,拱来拱去的玩腻了,大家的注意力又转移到了“升级”上。
挺有意思的是,“拱猪”是要得负分,大家都恨不得满手抓的都是2、3之流的小牌,尽量不要大别人的牌;
而“升级”是要得正分,又恨不得满手抓的都是A、K之流的大牌,盼望着每把牌都大别人一头。
一正,一负两种思维在游戏中游走。
因为“升级”中有一方是要得分的,所以对自己手中分值牌(5、10、K)的数量是十分在意的。
于是便有了“革命” 的说法,如果得分一方手中的分值牌总和不超过20分,就要“革命”,也就是重新抓牌。
被革命者是不爽的,对于这个规则,大家的意见是十分不同的,为此大家还曾“激烈”地讨论了一会儿,
或许这就是“屌丝”工科男的一个特征吧。
其中一位大神-“炮哥”对这次讨论久久不能释怀,为此思索了半夜,
次日下午,该大神来到我的座位前说要给我出道数学题,他昨天曾为此思索了半夜。
题目就是“升级两副牌时,一个人“革命”的概率是多少?”
第一感觉是被雷到了,后来一想这是这位大神的正常思维,忍不住也被他的思维带着较真起来。
能不能算?怎么算?
第一直觉是这个题目太难算了,这怎么计算呀,抱怨出这题的人无聊。
仔细一想,不是人家无聊,是自己不会计算的推脱借口。
忍不住想起跟一个ABB的经理合作的一段时间,他跟我讲的一些他自己的一些趣事。
为了下象棋赢电脑,他曾经亲自动手破解过计算机象棋程序。
对于他自己买车摇号,他计算出他每年摇中的概率,算计出他退休那年应该中(他期望的),不理想的是第一年就中了。
想到这个爱“较真”的“小老头”,我觉得我应该去算一下,尽管脑中的数学知识感觉到了贫困地步了。
虽然概率论和数理统计那些知识都忘了,但是我喜欢编程,程序员的思维开始给我指路。
想起了用单片机点亮数码管和led点阵去显示数字和字母的方法,就是事先把所有编码都准备好存进去,然后由程序调用。
又想起来调试嵌入式软硬件和现场设备的常用方法-排除法。
有了这两种思维的助阵,忽然豁然开朗!
首先,计算所有可能情况。两副牌共108张,去掉8张底牌,发到每个人手里就是25张,这是一个108选25的问题,
用排列组合的方法,共有C(108,25)中情况。
其次,排除法。可以革命的情况下,手中的分值只有0,5,10,15,20五种情况,
以下逐个计算:
0分,也就是从84张非分值牌中选25个,共有C(84,25)中情况;
5分,先从8个5中选一个,然后从从84张非分值牌中选24个,共有C(8,1)*C(84,24)中情况;
10分,要么有2个5,要么有一个10或者K,共有C(8,2)*C(84,23)+C(16,1)*C(84,24)中情况;
15分,一个5,一个10或者K,共有C(8,1)*C(16,1)*C(84,23)中情况;
20分,要么4个5,要么2个5和一个10或者K,要么两个10或者K,共有C(8,4)*C(84,21)+C(8,1)*C(16,1)*C(84,23)+C(16,2)*C(84,23)中情况;
那么“革命”的概率就是以上五种情形的总和除以总的情形。
原打算用C语言写个程序,大神机器上没有,就用matlab先编出一段吧,结果是6.05%。
百无聊赖中“屌丝”工科男的自娱自乐!
附程序
%% 该程序用于计算升级两副牌中,一个人手中的分牌不超过20分的概率
%% 作者: 于洪涛
%% 地点:北京工业大学
%% 时间:2012年7月25日
%%
close all;
clear all;
format long;
clc
%% 计算过程
c_all=nchoosek(108,25);
c_0=nchoosek(84,25);
c_5=nchoosek(8,1)*nchoosek(84,24);
c_10=nchoosek(8,2)*nchoosek(84,23)+nchoosek(16,1)*nchoosek(84,24);
c_15=nchoosek(8,1)*nchoosek(16,1)*nchoosek(84,23);
c_20=nchoosek(16,2)*nchoosek(84,23)+nchoosek(8,4)*nchoosek(84,21)+nchoosek(8,2)*nchoosek(16,1)*nchoosek(84,22);
%% 最终结果
gailv=(c_0+c_5+c_10+c_15+c_20)/c_all
 
 


https://blog.sciencenet.cn/blog-287975-595756.html

上一篇:回家
收藏 IP: 114.255.122.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-23 16:33

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部