2 일 동안 머리를 긁어 내 코드에 무엇이 잘못된 것인지 알 수 없습니다.배열에서 특정 번호를 선택하는 확률
Array1[33]: 0..31 (it has 2 fives)
Array2[32]: 0..31 (it has one five)
가 지금은 무작위로 두 번째 배열에서 첫 번째 배열에서 5, 5를 따기의 확률을 계산하려면 : 나는 두 배열을 가지고 있다고 할 수 있습니다. 이 공식으로이 작업을 수행합니다.
(2M/33) * (1M/32)
대략적으로 0.001894
입니다. 이제 사이클을 충분히 오래 실행하면 1000,000,0이라고 말하면서 '5' '5'가 대략 18940 번 올 것이라고 예상해야합니다. 그러나 테스트를 실행할 때 이런 일은 발생하지 않습니다. 여기 코드는 : 그것은 두 배나 많은 시간을 마련해야 할 때
public class Program
{
private static List<int> numbers1 = new List<int>();
static Random random = new Random(Guid.NewGuid().GetHashCode());
private static List<int> numbers2 = new List<int>();
static void Main(string[] args)
{
for (int i = 0; i < 33; i++)
{
numbers1.Add(i);
numbers2.Add(i);
}
numbers1.Add(5);
while (true)
{
var counter = 0;
for (int i = 0; i < 10000000; i++)
{
var num1 = numbers1[random.Next(0, 33)];
var num2 = numbers2[random.Next(0, 32)];
if (num1 == 5 && num2 == 5) counter++;
}
Console.Write(counter + ": " + (decimal) counter/10000000 + " - " + (2M/33) * (1M/32));
Console.ReadLine();
}
}
}
패턴은 '5'5 '는'어디 선가 9300-9500 번 온다.
제 질문은 내 수학/코드가 잘못 되었나요?
감사
편집 : 나는 단지 1 ~ 5 첫 번째 배열에두면, 모든 것이 예상 작동하기 때문에 것을
참고.
//numbers1.Add(5);
while (true)
{
var counter = 0;
for (int i = 0; i < 10000000; i++)
{
var num1 = numbers1[random.Next(0, 33)];
var num2 = numbers2[random.Next(0, 32)];
if (num1 == 5 && num2 == 5) counter++;
}
Console.Write(counter + ": " + (decimal) counter/10000000 + " - " + (1M/33) * (1M/32));
Console.ReadLine();
이 코드를 반환 예상되는 결과
왜 downvote? – Davita
두 개의 별개의 랜덤 (random)으로 동일한 결과를 얻었 을까? – SimpleVar
@YoryeNathan 예, 그냥 시도 : ( – Davita