无法确定随机性与代码问题

时间:2011-10-02 05:11:19

标签: c# random do-while

在这种情况下,我无法判断随机数生成器是否有问题。

Random x = new Random();
do
{
    a = x.Next(1, 200);
    aa = x.Next(1, 200);
    b = x.Next(a + 1, 200);
    bb = x.Next(aa + 1, 200);
    Console.WriteLine(a + " " + aa + "     " + b + " " + bb);

} while (a != aa || b != bb);

我在比较两对随机数是否相同时,我们想知道这些数字是什么。出于某种原因,他们总是在150-200的范围内。这对我来说似乎不够随便。

基本上我正在尝试模拟在赢得2号彩票之前需要多长时间。

这是因为随机类不够随机或代码有问题吗?

2 个答案:

答案 0 :(得分:2)

Random类的随机性没有任何问题,至少没有任何会影响你的代码。

您选择彩票号码的方式不正确。您选择的第一个数字本身会得到正确的分布,但随后您选择另一个数字高于第一个数字,这将有利于该范围内更高的数字。

此外,当第一个数字很高时,由于变化较小,因此更有可能猜测第二个数字。在你的猜测中,你会看到更高的数字中的更多命中。

除此之外看起来还不错。确定猜测数字的频率没有任何线性分布。你很少会在很早的时候做出正确的猜测,而且你很少会在没有做到正确的情况下进行很长时间。你可以看到特定数量的猜测集中在一起是正常的。

答案 1 :(得分:1)

您的代码没有按照您的想法执行。首先,ab都不会是56,因为the upper limit is exclusive。第二,如果a为54,则b将始终为55.因此,ab分别为54和55的可能性为1/56,但应该只有这个中有1到3,136的机会。

更新:此答案适用于问题的先前版本。一旦事情稳定下来,我会用最终问题的答案更新它。