📌  相关文章
📜  N次掷2个骰子得到总和的概率

📅  最后修改于: 2021-04-29 08:24:51             🧑  作者: Mango

给定总和。任务是找出在两次掷骰子N次后出现该总和的概率。
概率定义为在结果总数上的有利结果数。机率永远在0到1之间。
例子:

Input: sum = 11, times = 1
Output: 2 / 36
favorable outcomes = (5, 6) and (6, 5) i.e 2
Total outcomes = (1, 1), (1, 2), (1, 3)...(6, 6) i.e 36
Probability = (2 / 36)

Input: sum = 7, times = 7
Output: 1 / 279936

公式:-

方法:-

下面是上述方法的实现:

C++
// C++ implementation of above approach
#include 
using namespace std;
 
// function that calculates Probability.
int Probability(int sum, int times)
{
 
    float favorable = 0.0, total = 36.0;
    long int probability = 0;
 
    // To calculate favorable outcomes
    // in thrown of 2 dices 1 times.
    for (int i = 1; i <= 6; i++) {
        for (int j = 1; j <= 6; j++) {
            if ((i + j) == sum)
                favorable++;
        }
    }
 
    int gcd1 = __gcd((int)favorable, (int)total);
 
    // Reduce to simplest Form.
    favorable = favorable / (float)gcd1;
    total = total / (float)gcd1;
 
    // Probability of occurring sum on 2 dice N times.
    probability = pow(total, times);
 
    return probability;
}
 
// Driver Code
int main()
{
    int sum = 7, times = 7;
 
    cout << "1"
         << "/" << Probability(sum, times);
    return 0;
}


Java
// Java implementation of above approach
import java.io.*;
 
class GFG
{
// Recursive function to return
// gcd of a and b
static int __gcd(int a, int b)
{
    // Everything divides 0
    if (a == 0)
    return b;
    if (b == 0)
    return a;
     
    // base case
    if (a == b)
        return a;
     
    // a is greater
    if (a > b)
        return __gcd(a - b, b);
    return __gcd(a, b - a);
}
 
// function that calculates
// Probability.
static long Probability(int sum,
                        int times)
{
 
    float favorable = 0, total = 36;
    long probability = 0;
 
    // To calculate favorable outcomes
    // in thrown of 2 dices 1 times.
    for (int i = 1; i <= 6; i++)
    {
        for (int j = 1; j <= 6; j++)
        {
            if ((i + j) == sum)
                favorable++;
        }
    }
 
    int gcd1 = __gcd((int)favorable,
                     (int)total);
 
    // Reduce to simplest Form.
    favorable = favorable / (float)gcd1;
    total = total / (float)gcd1;
 
    // Probability of occurring
    // sum on 2 dice N times.
    probability = (long)Math.pow(total, times);
 
    return probability;
}
 
// Driver Code
public static void main (String[] args)
{
    int sum = 7, times = 7;
     
    System.out.println( "1" + "/" +
          Probability(sum, times));
}
}
 
// This code is contributed
// by inder_verma


Python 3
# Python 3 implementation of above approach
 
# from math import everything
from math import *
 
# function that calculates Probability.
def Probability(sum, times) :
    favorable, total, probability = 0.0, 36.0, 0
 
    # To calculate favorable outcomes
    # in thrown of 2 dices 1 times.
    for i in range(7) :
        for j in range(7) :
            if ((i + j) == sum) :
                favorable += 1
 
    gcd1 = gcd(int(favorable), int(total))
 
    # Reduce to simplest Form.
    favorable = favorable / gcd1
    total = total / gcd1
 
    # Probability of occurring sum on 2 dice N times.
    probability = pow(total, times)
 
    return int(probability)
 
 
# Driver Code
if __name__ == "__main__" :
 
    sum, times = 7, 7
 
    print("1","/",Probability(sum, times))
 
 
# This code is contributed by ANKITRAI1


C#
// C# implementation of above approach
 
class GFG
{
// Recursive function to return
// gcd of a and b
static int __gcd(int a, int b)
{
    // Everything divides 0
    if (a == 0)
    return b;
    if (b == 0)
    return a;
     
    // base case
    if (a == b)
        return a;
     
    // a is greater
    if (a > b)
        return __gcd(a - b, b);
    return __gcd(a, b - a);
}
 
// function that calculates
// Probability.
static long Probability(int sum,
                        int times)
{
 
    float favorable = 0, total = 36;
    long probability = 0;
 
    // To calculate favorable outcomes
    // in thrown of 2 dices 1 times.
    for (int i = 1; i <= 6; i++)
    {
        for (int j = 1; j <= 6; j++)
        {
            if ((i + j) == sum)
                favorable++;
        }
    }
 
    int gcd1 = __gcd((int)favorable,
                    (int)total);
 
    // Reduce to simplest Form.
    favorable = favorable / (float)gcd1;
    total = total / (float)gcd1;
 
    // Probability of occurring
    // sum on 2 dice N times.
    probability = (long)System.Math.Pow(total, times);
 
    return probability;
}
 
// Driver Code
public static void Main()
{
    int sum = 7, times = 7;
     
    System.Console.WriteLine( "1" + "/" +
        Probability(sum, times));
}
}
 
// This code is contributed
// by mits


PHP


Javascript


输出:
1/279936