簡體   English   中英

如何計算c#中彩票的中獎機會?

[英]How to calculate the winning chance of the lottery in c#?

using System;

namespace FirstApplication
{
    class Program
    {
        public static void Main()
        {
            int n = Convert.ToInt32(Console.ReadLine());
            int k = Convert.ToInt32(Console.ReadLine());
            string category = Console.ReadLine();
            double total = 0;

                switch (category)
                {
                    case "I":
                        total = bc(k, 6) * bc(n - k, k - 6) / bc(n, k);
                        Console.WriteLine("{0:F10}", total);
                        return;
                    case "II":
                        total = bc(k, 4) * bc(n - k, k - 4) / bc(n, k);
                        Console.WriteLine("{0:F10}", total);
                        return;
                    case "III":
                        total = bc(k, 2) * bc(n - k, k - 2) / bc(n, k);
                        Console.WriteLine("{0:F10}", total);
                        return;
                }
            Console.Read();

        }
        private static double bc(decimal n, decimal k)
        {
            if (k == 0 || k == n)
                return 1;
            return bc(n - 1, k - 1) + bc(n - 1, k);
        }
    }
}



我的代碼有問題。

練習如下:

您參加的彩票 6/49 只有一個中獎變體(簡單),並且您想知道您的中獎幾率:

- 在 I 類(6 個數字)

- 在 II 類(5 個數字)

- 在 III 類(4 個數字)

編寫一個控制台應用程序,從輸入的總球數、提取的球數和類別中獲取,然后如果您使用一個簡單的變體,則以小數點后 10 位的精度打印獲勝幾率。

例如,如果我輸入:

49

6

結果還可以,但是當我輸入時:

45

15

我沒有得到任何結果。

有什么建議我的代碼有什么問題嗎?

我認為您的代碼沒有任何問題。 它只運行了很長時間,因為您一次又一次地使用相同的值調用bc 我添加了一個字典來存儲和查找已經計算的值:

private static Dictionary<(int N, int K),double> knownValues = new Dictionary<(int N, int K),double>();
private static double bc(int n, int k)
{
    var key = (n,k);
    if (!knownValues.ContainsKey(key))
    {
       if (k == 0 || k == n)
       {
           knownValues.Add(key, 1);
       }
       else 
       {
           knownvalues.Add(key, bc(n - 1, k - 1) + bc(n - 1, k));
       }
    }
    return knownValues[key];
}

它會在 < 6 秒內返回 45,15,III 輸入的值為 0.0364626616。 這是否正確,我不知道,但至少它終止了。 也許你的老師想讓你試試這個並了解遞歸和計算時間。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM