通过MCP连接 →

输入计算

牌堆中的花色
牌堆中的点数

数学公式

数学公式: 随机扑克牌生成器
Show calculation steps (1)
  1. Fisher-Yates shuffle (without replacement)

    Fisher-Yates shuffle (without replacement): 随机扑克牌生成器

    For k from N-1 down to 1, choose j uniformly and swap, producing an unbiased random permutation; take the first numSamples cards.

广告

结果

已抽出的牌
2
from a deck of 52 cards
Eight of Clubs
King of Hearts
牌堆大小 52 cards
抽出的牌 Eight of Clubs, King of Hearts

这个工具能做什么

随机扑克牌生成器会从一副刚洗好的虚拟标准扑克牌中,为你抽取一张或多张牌。你可以自行决定抽几张牌、是否自定义牌堆,以及每抽一张牌后是放回牌堆(放回抽样)还是抽出后置于一旁(不放回抽样)。无论是玩牌、课堂上讲解概率、表演魔术、辅助做决定,还是任何需要公平、无偏随机抽牌的场合,它都能派上用场。

按花色和点数排列的标准52张扑克牌及两张大小王
一副标准牌:四种花色各13个点数,外加可选的大小王。

使用方法

输入要抽取的牌数,选择抽牌模式,并设定每行显示几张牌。在「牌堆设置」中,你可以单独开关各个花色(梅花、方块、红心、黑桃)和点数(2 到 A),还能加入 0、1 或 2 张大小王。最终参与抽牌的牌堆,由所有被同时勾选了点数和花色的牌组成,再加上选中的大小王。默认情况下,牌堆为完整的 52 张牌。

公式详解

牌堆是一个包含 \(N\) 张牌的列表。抽一张牌时,我们计算一个均匀分布的随机索引 $$i = \lfloor \text{random()} \times N \rfloor$$ 其中 \(\text{random()}\) 返回 \([0, 1)\) 区间内的一个实数。在「放回」模式下,每次抽牌都独立地从完整牌堆中进行,因此同一张牌可能被抽中多次。在「移除」模式下,我们运行 Fisher-Yates 洗牌算法——对于 \(k\) 从 \(N-1\) 递减到 \(1\),取 $$j = \lfloor \text{random()} \times (k+1) \rfloor,\quad D[k] \leftrightarrow D[j]$$ 并交换位置 \(k\) 与 \(j\)——然后取出最前面的若干张牌,从而保证不会出现重复。

Advertisement
0 到 1 之间的随机值映射到牌组数组中的某个索引
一个随机小数乘以牌堆大小 \(N\) 来选取一张牌的索引。

实例演算

以默认的 52 张牌堆为例,在「放回」模式下抽 2 张牌:假设 \(\text{random()}\) 先后返回 \(0.0769\) 和 \(0.6442\)。第一张牌的索引 $$\lfloor 0.0769 \times 52 \rfloor = 3$$ 第二张牌的索引 $$\lfloor 0.6442 \times 52 \rfloor = 33$$ 结果是一对有序的牌,例如「梅花 5」和「黑桃 9」,并以每行两张的形式显示。

常见问题

「放回」和「移除」有什么区别?「放回」是放回抽样(可能抽到重复的牌);「移除」是不放回抽样(每张牌都不相同,就像发一手牌一样)。

能抽出比牌堆总数还多的牌吗?只有在「放回」模式下可以。在「移除」模式下,抽牌数量会被限制为牌堆大小,因为你无法发出比实际存在的牌更多的不同牌。

大小王是怎么处理的?大小王没有花色,名称就叫「Joker」。在「移除」模式下,如果有两张大小王,即便名称相同,它们也算作两次不同的抽牌。

最后更新: