【发布时间】:2017-10-12 15:13:26
【问题描述】:
我正在编写一个名为 Club Keno 的模拟彩票游戏的程序,我想匹配他们对 Kicker 的赔率。所以我所做的是选择一个介于 1 和 10046 之间的随机数,然后根据该数字,我返回 kicker 值。如果随机数是 1000,我会返回 4 的 kicker 值。我想知道是否有更好的方法来做到这一点。而且我意识到它加起来并不完全是 100%,但这是我可以在网上找到的几率。他们加起来高达 100.45%
public static int Kicker()
{
var rnd = new Random();
int num = rnd.Next(1, 10046);
if (num < 125) //1.25 percent chance
return 10;
if (num < 495) //3.7 percent chance
return 5;
if (num < 1120)//6.25 percent chance
return 4;
if (num < 1745)//6.25 percent chance
return 3;
if (num < 5745)//40 percent chance
return 2;
return 1; // 43 percent chance
}
【问题讨论】:
-
为什么是 10046?为什么要使用 int 呢?您可以从随机生成双精度。另外,为什么你的随机实例在方法中?它应该是静态和类级别,而不是方法级别。
-
它在一个名为 Pick 的类中,该类负责选择抽奖号码、玩家号码、Jack 号码、ez 选择号码和起脚号码。
-
.... 因为否则,如果您非常快速地调用此方法(因为当前时间用作 Random 的种子),您将始终生成相同的“随机”数字。
-
@JosephThompson 使用
Thread.Sleep来克服相同的随机种子真是太可怕了。 -
老实说,只需使用 this answer 并调整您的代码以适应。使用
Dictionary<int, double>(而不是 OP 使用的自定义类)来存储您的“踢球者”及其概率。大约需要 5 分钟
标签: c#