星期二, 1月 31, 2006

[.Net]樂透下期號碼預測(1)

之前騎車的時候想到的一個 idea,想要來預測下期樂透的號碼.

以亂數取某數字,理論上,當次數越趨近於無限的時候,每個數字出現的機率會趨近於相等.
所以我們寫了這麼一個程式來驗證其正確性:

using System;
using System.Collections;

public class MyClass
{
    public static void Main()
    {
        Random r = new Random();
        int[] statistics = new int[43];
        int i=0;
        int sum=0;
        
        // initialize
        for( i=0; i<statistics.Length; i++ )
            statistics[i]=0;
            
        for( i=0; i<100000; i++ )
        {
            // int index = Convert.ToInt32( 41*r.NextDouble()+1 );
            int index = r.Next(42)+1;
            statistics[ index ] = statistics[ index ] + 1;
        }
        
        for( i=0; i<statistics.Length; i++ )
        {
            Console.WriteLine( "statistics[{0}] = {1}", i, statistics[i] );
            sum+=statistics[i];
        }
        Console.WriteLine( "sum={0}", sum );
            
        RL();
    }
    
    #region Helper methods
    private static void RL()
    {
        Console.ReadLine();    
    }
    #endregion
}

這邊遇到一件很有趣的事情,如果你用 41*r.NextDouble()+1 來取的話
結果會是最前面數字與最後面數字出現的機率會比其他數字要少了約一倍.
所以這樣取會比較好些: r.Next(42)+1

另外我們捨棄 [0] 不用,純使用 [1] ~ [42], 以方便我們的統計.

參考資料:

...待續...

沒有留言: