54张扑克牌,3人轮抽,求单人同时抽到大小王的概率

【每日一问】

一副扑克54张,三个人轮流抓牌,一个人18张。大王小王被同一个人拿到的概率是多大?

解题思路:

将扑克牌分成三堆,再分给三个人。
古典概型问题
分子:
因为大小王两张扑克必须在一起,还剩52张扑克牌,分成16,18,18三堆扑克牌,再分给三个人。
注意:有两个相同的18

C 52 16 × C 36 18 × C 18 18 A 3 3 A 2 2 C_{52}^{16} \times C_{36}^{18} \times C_{18}^{18} \frac{A_3^3}{A_2^2} C5216×C3618×C1818A22A33

分母:
直接将54张扑克牌分成18,18,18三堆扑克牌,再分给三个人。
注意:有三个相同的18

C 54 18 × C 36 18 × C 18 18 A 3 3 A 3 3 C_{54}^{18} \times C_{36}^{18} \times C_{18}^{18} \frac{A_3^3}{A_3^3} C5418×C3618×C1818A33A33

C 52 16 × C 36 18 × C 18 18 A 3 3 A 2 2 C 54 18 × C 36 18 × C 18 18 A 3 3 A 3 3 = 18 × 17 × 3 54 × 53 = 17 53 \frac{C_{52}^{16} \times C_{36}^{18} \times C_{18}^{18} \frac{A_3^3}{A_2^2}}{C_{54}^{18} \times C_{36}^{18} \times C_{18}^{18} \frac{A_3^3}{A_3^3}} = \frac{18 \times 17 \times 3}{54 \times 53} = \frac{17}{53} C5418×C3618×C1818A33A33C5216×C3618×C1818A22A33=54×5318×17×3=5317

结论解释

单张扑克牌被三人之中的某个人抽中的概率为 1 3 \frac{1}{3} 31
大王一定会被某个人抽中(假设叫小明),在此基础上小明抽到小王的概率(即同时抽到大小王的概率)是 17 53 \frac{17}{53} 5317< 1 3 \frac{1}{3} 31
之所以抽两张扑克牌的概率减少了的原因是
小明这轮抽到了大王,就无法抽到小王,导致抽小王的概率低于 1 3 \frac{1}{3} 31。 也就是说抽大王和抽小王是相关事件,会互相影响。

另一种解题思路

说了这么多,不仅是想解释概率偏小的原因,而且还想引入另一种思路解决这个问题。
54张牌,3个人轮流抽,一共18轮。
还是以某人(小明)抽到大王为基准,小明还得抽到小王。大王可以出现在 3 × 18 3\times18 3×18的任意位置,小王也必须出现在相同的人手中,但不能出现在大王出现的那一轮(共17轮)。
3 × 18 × 17 3\times18\times17 3×18×17
总共有 3 × 18 × 53 3\times18\times53 3×18×53种情况,即小王不与大王相同位置。

3 × 18 × 17 54 × 53 = 17 53 \frac{3\times18\times17}{54\times53}=\frac{17}{53} 54×533×18×17=5317

致谢
2019-04-06每日一问是我参与"学习9群-Datawhale"学习总结所撰写的博客。
以下都是给予我帮助的朋友(群昵称)

  • Muse-南京大学-计算机
  • CJ_中山大学_研究生 | Datawhale
  • 栾 应统

十分感谢!

  • 12
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
好的,下面是一个简单的使用 PHP 编写的扑克牌大小游戏,可以让两个人牌,每人五。代码如下: ```php <?php // 定义扑克牌花色和点数数组 $suits = array('♠', '♥', '♦', '♣'); $ranks = array('A', 'K', 'Q', 'J', '10', '9', '8', '7', '6', '5', '4', '3', '2'); // 初始化一副牌 $deck = array(); foreach ($suits as $suit) { foreach ($ranks as $rank) { $deck[] = $suit . $rank; } } // 洗牌 shuffle($deck); // 两个人牌 $player1_hand = array_slice($deck, 0, 5); $player2_hand = array_slice($deck, 5, 5); // 计算每个人的牌型大小 $player1_rank = calculateRank($player1_hand); $player2_rank = calculateRank($player2_hand); // 比较牌型大小,输出胜者 if ($player1_rank > $player2_rank) { echo "Player 1 wins!\n"; } elseif ($player1_rank < $player2_rank) { echo "Player 2 wins!\n"; } else { echo "Tie!\n"; } // 计算牌型大小的函数 function calculateRank($hand) { // 定义牌型数组 $ranks = array( 'Straight flush' => 9, 'Four of a kind' => 8, 'Full house' => 7, 'Flush' => 6, 'Straight' => 5, 'Three of a kind' => 4, 'Two pairs' => 3, 'One pair' => 2, 'High card' => 1 ); // 将牌拆分成花色和点数数组 $suits = array(); $ranks = array(); foreach ($hand as $card) { $suits[] = substr($card, 0, 1); $ranks[] = substr($card, 1); } // 判断是否为同花顺 if (isStraight($ranks) && isFlush($suits)) { return $ranks['Straight flush']; } // 判断是否为四条 if (in_array(4, array_count_values($ranks))) { return $ranks['Four of a kind']; } // 判断是否为葫芦 if (in_array(3, array_count_values($ranks)) && in_array(2, array_count_values($ranks))) { return $ranks['Full house']; } // 判断是否为同花 if (isFlush($suits)) { return $ranks['Flush']; } // 判断是否为顺子 if (isStraight($ranks)) { return $ranks['Straight']; } // 判断是否为三条 if (in_array(3, array_count_values($ranks))) { return $ranks['Three of a kind']; } // 判断是否为两对 if (count(array_keys(array_count_values($ranks), 2)) == 2) { return $ranks['Two pairs']; } // 判断是否为一对 if (in_array(2, array_count_values($ranks))) { return $ranks['One pair']; } // 如果都不是以上牌型,则为高牌 return $ranks['High card']; } // 判断是否为顺子 function isStraight($ranks) { $max_rank = array_search(max($ranks), $ranks); $min_rank = array_search(min($ranks), $ranks); return (max($ranks) - min($ranks) == 4 && count(array_unique($ranks)) == 5) || ($max_rank == 12 && $min_rank <= 3 && count(array_unique($ranks)) == 5); } // 判断是否为同花 function isFlush($suits) { return count(array_unique($suits)) == 1; } ?> ``` 这个游戏主要是根据每个人抽到的牌来计算牌型大小,然后比较大小来决定胜负。在计算牌型大小时,主要是通过判断每个人手中的牌是否为同花顺、四条、葫芦、同花、顺子、三条、两对、一对或高牌等牌型来确定大小。希望这个例子能对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值