我正在尝试运行扑克模拟并拥有有关扑克桌的以下数据
- 每个玩家为底池贡献了多少
- 每个玩家的“手牌得分”(翻牌后)(即,如果
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]
and 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) }。
现在,按顺序划分底池:
首先,您将从每位玩家的贡献中提取(最多)20 点来创建第一个底池。并将其平均分配给 2 和 0。第一个锅将是 (20 + 20 + 20 = 60。因此 0 和 2 都会得到 30)。之后,第一批玩家获胜,您剩下:{ 0 (80) }, { 1 (60) }。
现在,您将从每个玩家的贡献中提取(最多)80 来创建下一个彩池 (80 + 60 = 140)。并将其设置为 0(无需除法,因为顶部组中不再多于 1 个,因此 0 将收到整个 140)。您将剩下:{ 1 (0) }。
没有更多的贡献了,所以你已经完成了。
因此,在您的示例中,总共 0 个将收到 170 个,2 个将收到 30 个。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)