Невозможно определить случайность по сравнению с проблемой кода - PullRequest
0 голосов
/ 02 октября 2011

Я не могу сказать, если что-то не так с генератором случайных чисел в этом случае.

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 номера.

Это потому, что класс Random не является достаточно случайным или существует проблема с кодом?

Ответы [ 2 ]

2 голосов
/ 02 октября 2011

В случайности класса Random нет ничего плохого, по крайней мере, ничего, что могло бы повлиять на ваш код.

Ваш способ выбора номеров лотереи неверен. Первое выбранное вами число получает правильное распределение само по себе, но затем вы выбираете другое число, которое будет выше первого, что будет благоприятствовать более высоким числам в диапазоне.

Кроме того, когда первое число велико, более вероятно угадать второе число, поскольку существует меньшая вариация. В своих догадках вы увидите значительно больше хитов в старших числах.

Кроме того, все выглядит хорошо. Определение того, как часто вы можете угадать число, не имеет линейного распределения. Вы бы очень редко получили правильное предположение очень рано, и вы очень редко бывали очень долго, даже не поняв его правильно. Это нормально, что вы видите концентрацию вокруг определенного числа догадок.

1 голос
/ 02 октября 2011

Ваш код не делает то, что вы думаете, он делает.Во-первых, ни a, ни b никогда не будут 56, потому что верхний предел является исключительным .Во-вторых, если a равно 54, b всегда будет 55. Таким образом, есть вероятность 1 к 56, что a и b равны 54 и 55 соответственно, но вероятность этого должна быть только 1 к 3136.

Обновление: этот ответ относится к предыдущей версии вопроса.Когда все стабилизируется, я дополню его ответом на любой окончательный вопрос.

...