数学期望C语言模拟一个搅打鸡蛋中一侧的最大炸弹数

搅蛋是江苏、安徽一带广为流传的一种纸牌游戏。由当地扑克局“跑得快”和“80分”发展而来。游戏四人一组,输赢升级。由于使用了两副牌以及“人人匹配”和“同花顺”的规则,炸弹的数量对于游戏来说非常重要。通过C语言的模拟,可以预测玩家手中炸弹数量的数学期望。对自己的卡型进行评估,有一定的意义。

炸弹:4张或4张以上点数相同的牌,或者4个王(称为天王炸弹),或者同花顺。

大家:两个?主卡叫match for everyone。当它与其他牌搭配时,可以作为除国王以外的任何花色、任何点数的牌。主卡点数可以取2到a。

同花顺:同花色连续五张牌,最大的是10JQKA,最小的是A2345,可以当炸弹。

程序完全模拟了搅打鸡蛋的操作过程,大体有以下五个模块。

1.印刷卡片:按顺序给108卡片分配颜色和点数。

2.洗牌:多次随机交换牌的位置,打乱牌的顺序。

3.发牌:将洗好的牌依次发给4名玩家。

4.处理卡片:(将玩家1中的卡片按顺序排列)找出玩家1中的最大炸弹数。

5.重复以上步骤数次,统计玩家1获得的平均炸弹数并输出结果。

其中1和5在主程序中实现,2,3,4由函数实现。

首先,我们需要构建一个结构扑克来存储一张牌的花色和点数。

创建一副包含108个扑克结构的结构阵列牌组(一套牌),然后第I张牌的点数就是I模13的余数。卡1-13和53-65为第一套;牌14-26和66-78是第二种花色...以此类推,牌105和106是小王,算第五套;牌107和108为王,算第六套。

将打印好的卡片组传递给函数randsort。用伪随机数种子系统时间生成两个伪随机数I和J,交换牌堆中第I张牌和第J张牌的位置,重复上述操作1000次。

创建四个扑克结构数组p1,p2,p3,p4,用来存放四个玩家手中的牌。将结构数组deck和p1、p2、P3和P4传入函数dealpoker,并将deck中的第I张牌发送给第j个人,其中j是I-module 4的余数。

* * *考虑以下两种情况下的炸弹数量:

非同花顺:统计玩家1手里的牌和王的个数,找出所有牌数大于等于4的点,统计它们的个数,结果就是数弹的弹数。特别是当某一点的牌数为8时,需要拆成两个弹,即弹数+1;当国王数为4时,炸弹数为+1。

同花顺:你需要按顺序搜索A开头到10开头的同花顺。搜索A开头的同花时,先指定花色,搜索同花的1牌。如果找到了,就用未排序的同花顺的最后一张牌交换这张牌,继续寻找第二张牌。如果找到了,就把这张牌和非排序同花顺的倒数第二张牌对调,继续找。如果所有五张牌都能找到,检查这五个点中有多少正好有四张牌。如果大于1(例如22223455556),则不认为是同花顺。如果只有1张牌,则算作同花顺。同花顺数是+1,但是炸弹数是-1。这五张牌叫做同花。如果不是,则算作同花顺,同花顺数为+1。考虑到可能会有两次相同的同花顺,上述五张卡的取卡过程需要进行两次。

最后,将炸弹数量与冲洗次数相加,得到最终结果。

首先指定匹配人的点数,然后检索玩家手中匹配人的位置和数量。依次把每一场比赛看成每张牌的一张牌,然后统计炸弹数,取最大值作为最终结果。

有两件和大家很搭,也是一样。

重复上述操作相当多的次数,计算平均值作为玩家一手拿到最多炸弹的数学期望的估计值,并打印结果。

另外,同花的期望也可以单独统计。

不是所有人都配的时候,算纯数字弹的期望大概是1.365。

接近贴吧神的纯概率计算。

普通的炸弹不多,用了也爱惜,XD。