algorithm - 在不创建边池的情况下确定扑克中的获胜金额

标签 algorithm poker

我正在尝试运行扑克模拟并获得有关扑克 table 的以下数据

  • 每个玩家对底池的贡献有多少
  • 每个玩家的“手牌得分”(翻牌后)(即,如果 player[0].score == player[1].score,则他们打平)

我一直在计算每个玩家应该赢得多少,而无需创建边池并为每个玩家分配玩家。

例如,

player[0].contributed = 100
player[1].contributed = 80
player[2].contributed = 20

player[0].score = 10
player[1].score = 2
player[2].score = 10

total_pot = 200;

在这个例子中,我是否需要先返回 player[0] 20 并将其从彩池中移除?

然后,由于 player[0]player[2] 并列第一, 并且 player[1] 输了,底池应该分成:

player[0].received = 170
player[1].received = 0
player[2].received = 30

随后,如果 player[1] 赢了,底池应该分配为:

player[0].received = 20
player[1].received = 180
player[2].received = 0

最佳答案

首先按分数降序排序,因此您最终会得到两组: { 0, 2 }, { 1 }。

然后,按照他们贡献的升序对每个组进行排序: { 2 (20), 0 (100) }, { 1 (80) }。

现在,按顺序分锅:

  1. 首先,您将从每位玩家的贡献中抽取(最多)20 来创建第一个底池。并将它平分给 2 和 0。第一个底池将是 (20 + 20 + 20 = 60。因此 0 和 2 都会得到 30)。之后,第一个玩家的奖金已经完成,剩下的是:{ 0 (80) }、{ 1 (60) }。

  2. 现在,您将从每个玩家的贡献中扣除(最多)80 来创建下一个底池 (80 + 60 = 140)。并将其交给 0(不需要除法,因为顶部组中不再超过一个,因此 0 将收到全部 140)。您将得到:{ 1 (0) }。

  3. 没有更多的贡献,所以你完成了。

因此,在您的示例中,0 将收到 170,而 2 将收到 30。

关于algorithm - 在不创建边池的情况下确定扑克中的获胜金额,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5462583/

相关文章:

java - 实现复制和粘贴的代码/文本检测?

c++ - 如何创建用于噪声生成的哈希函数

algorithm - 求点云中任意两点的最大距离?

java - 德州扑克识别一对

检查数组 S 和 T 是否为整数 s 和 t 所以 s+t=k 如果 k 是给定数字的算法

java - 在Java中创建数组的数组

php - 检查扑克直

android - 在骰子游戏中比较数组

python - 有人可以帮我在 pygame 中为扑克游戏创建一副纸牌吗

algorithm - 在树中存在的键处拆分一个 treap