数学期望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。