中奖机率
Winning lottery odds
我还有一个关于彩票的问题。我必须提出这个问题:“你想参加只有一个变体的 49 中 6 的机会游戏,你想知道你有什么机会 win:category I(6 个数字),类别 II(5 个数字), 类别 III(4 个数字)。编写一个应用程序,接收球的总数、抽取的球数作为输入数据,然后打印出如果使用单一变体游戏获胜的机会,精确到小数点后 10 位”。我的问题是:计算这个的公式是什么?我试图找到那个公式,但我没有找到。一个例子是 40、5 和 II(5 个数字),结果是 0.0002659542 或 45、15 和类别 III 是 0。0000001324.I 需要提到我是初学者。我的代码可以正常工作,但只能用于 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)
我还有一个关于彩票的问题。我必须提出这个问题:“你想参加只有一个变体的 49 中 6 的机会游戏,你想知道你有什么机会 win:category I(6 个数字),类别 II(5 个数字), 类别 III(4 个数字)。编写一个应用程序,接收球的总数、抽取的球数作为输入数据,然后打印出如果使用单一变体游戏获胜的机会,精确到小数点后 10 位”。我的问题是:计算这个的公式是什么?我试图找到那个公式,但我没有找到。一个例子是 40、5 和 II(5 个数字),结果是 0.0002659542 或 45、15 和类别 III 是 0。0000001324.I 需要提到我是初学者。我的代码可以正常工作,但只能用于 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)