确定扑克中的获胜金额而不创建边池

Lem*_*m0n 9 algorithm poker

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

  • 每个球员贡献了多少钱
  • 每个玩家的"手牌得分"(翻牌后)(即player[0].score == player[1].score,他们并列)

我不知道每个玩家应该赢得多少,而不需要创建副圈并为每个玩家分配玩家.

例如,

player[0].contributed = 100
player[1].contributed = 80
player[2].contributed = 20
Run Code Online (Sandbox Code Playgroud)

player[0].score = 10
player[1].score = 2
player[2].score = 10
Run Code Online (Sandbox Code Playgroud)

total_pot = 200;
Run Code Online (Sandbox Code Playgroud)

在这个例子中,我首先需要返回player[0]20并将其从锅中取出吗?

然后,因为player[0]并且player[2]已经并列第一名并且player[1]已经输了,所以应该将底池划分为:

player[0].received = 170
player[1].received = 0
player[2].received = 30
Run Code Online (Sandbox Code Playgroud)

然后,如果player[1]赢了,应该将底池划分为:

player[0].received = 20
player[1].received = 180
player[2].received = 0
Run Code Online (Sandbox Code Playgroud)

Sam*_*ami 10

首先按分数降序排序,因此您最终会得到两组:{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.