在这种情况下,我无法判断随机数生成器是否有问题。
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号彩票之前需要多长时间。
这是因为随机类不够随机或代码有问题吗?
答案 0 :(得分:2)
Random
类的随机性没有任何问题,至少没有任何会影响你的代码。
您选择彩票号码的方式不正确。您选择的第一个数字本身会得到正确的分布,但随后您选择另一个数字高于第一个数字,这将有利于该范围内更高的数字。
此外,当第一个数字很高时,由于变化较小,因此更有可能猜测第二个数字。在你的猜测中,你会看到更高的数字中的更多命中。
除此之外看起来还不错。确定猜测数字的频率没有任何线性分布。你很少会在很早的时候做出正确的猜测,而且你很少会在没有做到正确的情况下进行很长时间。你可以看到特定数量的猜测集中在一起是正常的。
答案 1 :(得分:1)
您的代码没有按照您的想法执行。首先,a
和b
都不会是56,因为the upper limit is exclusive。第二,如果a
为54,则b
将始终为55.因此,a
和b
分别为54和55的可能性为1/56,但应该只有这个中有1到3,136的机会。
更新:此答案适用于问题的先前版本。一旦事情稳定下来,我会用最终问题的答案更新它。