模拟每个玩家获胜概率不同的游戏?

Simulating a game where each player has a different probability of winning?

假设我有 4 个玩家:

Player 1 wins 50% of his games
Player 2 wins 20% of his games
Player 3 wins 90% of his games
Player 4 wins 20% of his games

我需要一种方法来模拟不同玩家一起玩并随机选择获胜者,但获胜者是有意义的。

我的第一个想法是这样做:

如果我的随机数介于 1 和 50 之间,则玩家 1 获胜;如果我的随机数介于 51 和 101 之间,则玩家 2 获胜;如果介于 102 和 192 之间,则玩家 3 获胜;如果介于193 和 203,玩家 4 获胜。

我从 1 到 203 之间选一个数字来决定获胜者。假设我的随机数是均匀分布的,我应该期望得到我想要的。

我想知道是否有更数学的方法可以做到这一点,或者这是唯一的方法吗? (利用 c++ 语言)

我会把这条评论改成答案,因为我还有更多:

我喜欢 ELO 评级。哈克尼斯多年前写了一本书,描述了美国国际象棋联合会如何通过扩展基本的 ELO 系统来实施其评级。顺便说一句,当新玩家建立他的评级时,前 25 场比赛是基于严格的 ELO 系统。 (希望我能提供参考,但我的工作电脑不允许我导航到任何与游戏有关的网站)。

进入数字和算法,'easy' 根据获胜百分比生成评级。一旦你有了评分,你就可以根据评分的差异计算出正面交锋的获胜概率。

一旦你确定了概率,然后将每个玩家战胜他的三个对手的概率相加,并宣布总数最高的获胜者。如果你想要一个人赢得循环赛的具体概率,你可以使用基本统计分析从各个游戏方差的总和中计算出所有人获胜百分比的方差。