繁体   English   中英

中奖概率

[英]Winning lottery odds

我还有一个关于彩票的问题。 我必须提出这个问题:“您想以一种变体参加 49 次机会中的 6 次游戏,并且您想知道您将赢得什么机会:I 类(6 个数字),II 类(5 个数字),类别 III(4 个数字)。编写一个应用程序,接收球总数、抽出的球数作为输入数据,然后在使用单一变体时以小数点后 10 位的精度打印获胜机会”。 我的问题是:计算这个的公式是什么?我试图找到那个公式,但我没有找到。 一个例子是 40、5 和 II(5 个数字),结果是 0.0002659542 或 45、15,类别 III 是 0.0000001324。我需要提一下我是初学者。 我的代码有效,但仅适用于 49 中的 6。

static void Main(string[] args)
    {
        int n = Convert.ToInt32(Console.ReadLine());
        int k = Convert.ToInt32(Console.ReadLine());
        string extract = Console.ReadLine();
        int category1 = category(extract);
        switch (category1)
        {
            case 6:
                calculateTheOddsToWin(n, k, extract);
                break;
            case 5:
                calculateTheOddsToWin(n, k, extract);
                break;
            case 4:
                calculateTheOddsToWin(n, k, extract);
                break;
        }

    }
        static void calculateTheOddsToWin(int n , int k , string extract)
    {
        double comb = combination(n, k);
        decimal solution =(decimal)( 1 / comb);
        decimal round = Math.Round(solution,10);
        Console.WriteLine(round);
    }
        static double combination(int n, int k)
        {
            double factN = factorialN(n);
            double factK = factorialK(k);
            double factNK = substractFactorialNK(n, k);
            double combination = factN / (factNK * factK);
            return combination;
        }

        static double factorialN(int n)
        {
            double factorialN = 1;
            for(int i = 1; i <= n; i++)
            {
                factorialN *= i;
            }
            return factorialN;
        }
        static double factorialK( int k)
        {
            double factorialK = 1;
            for (int i = 1; i <= k; i++)
            {
                factorialK *= i;
            }
            return factorialK;
        }
        static double substractFactorialNK(int n, int k)
        {
            double factorialNK = 1;
            int substract = n - k;
            for (int i = 1; i <= substract; i++)
            {
                factorialNK *= i;
            }
            return factorialNK;
        }
        static int category(string extract)
        {
           if(extract == "I")
            {
                return 6;
            }else if(extract == "II")
            {
                return 5;
            }else if(extract == "III")
            {
                return 4;
            }
            else
            {
                return -1;
            }
        }

您需要计算三个数字:

T: The total number of combinations
W: The number of ways to draw the desired amount of winning numbers
L: The number of ways to draw the desired amount of losing numbers
Then, the answer is W * L / T

示例:40 个号码,5 次平局,4 次正确:

W = choose(5,4) = 5 (4 winners from 5 possibilities)
L = choose(35,1) = 35 (1 loser from 35 possibilities)
T = choose(40, 5) = 658008 (5 numbers from 40 possibilities)

5 * 35 / 658008 = 0.00265954

一般:

n = count of numbers
d = count of available winning numbers = draw size
k = count of winning numbers drawn (d, d-1, and d-2 for I, II, III).
W = choose(d, k) (k winners from d possibilities)
L = choose(n-d, d-k) (d-k losers from n-d possibilities)
T = choose(n, d) (d numbers from n possibilities)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM