0

この場合、乱数ジェネレーターに問題があるかどうかはわかりません。

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);

乱数の2つのペアが同じ場合を比較していますが、それらが何であるかを知りたいです。何らかの理由で、それらは常に 150 ~ 200 の範囲になります。これは、私には十分にランダムではないようです。

基本的には、2 桁の宝くじが当たるまでの時間をシミュレートしようとしています。

これは Random クラスが十分にランダムでないためですか、それともコードに問題がありますか?

4

2 に答える 2

2

クラスのランダム性に問題はありませんRandom。少なくともコードに影響を与えるものは何もありません。

宝くじの番号の選び方が間違っています。選択した最初の数値は、それ自体で正しい分布を取得しますが、最初の数値よりも大きい別の数値を選択すると、範囲内でより高い数値が優先されます。

また、最初の数値が高い場合は、変動が小さいため、2 番目の数値を推測する可能性が高くなります。あなたの推測では、数字が大きいほどヒット数がかなり多いことがわかります。

それ以外は問題ないようです。数値を推測できる頻度の決定には、線形分布はありません。非常に早い段階で正しい推測が得られることはめったになく、正しい推測が得られずに非常に長く続くこともめったにありません。特定の数の推測に集中しているのは普通のことです。

于 2011-10-02T05:31:17.270 に答える
1

あなたのコードは、あなたが思っていることをしていません。まず、上限が排他的であるため、56 になることはありませaん。2 番目の ifが 54 の場合、常に 55 になります。したがって、 と がそれぞれ 54 と 55 である可能性は 56 分の 1 ですが、その可能性は 3,136 分の 1 しかないはずです。babab

更新: この回答は、以前のバージョンの質問に適用されます。物事が安定したら、最終的な質問がどうなるかに対する答えで更新します.

于 2011-10-02T05:25:21.533 に答える