Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Xác suất nhận được tổng khi tung 2 xúc xắc N lần trong C++


Cho tổng và số lần tung cặp xúc xắc làm đầu vào, nhiệm vụ là xác định xác suất nhận được tổng cho trước khi tung cặp xúc xắc N lần.

Xác suất là cơ hội đạt kết quả mong muốn từ tập dữ liệu có sẵn. Phạm vi xác suất nằm giữa 0 và 1, trong đó số nguyên 0 thể hiện khả năng không thể xảy ra và 1 chỉ sự chắc chắn.

Ví dụ

Đầu vào: sum = 12, N = 1 
Đầu ra: Xác suất = 1/36 
Giải thích: nếu tung cặp xúc xắc một lần thì các tổ hợp sẽ là (1,1), (1,2), (1,3), (1,4), (1,5), (1,6), (2,1), (2,2), (2,3), (2,4), (2,5), (2,6), (3,1), (3,2), (3,3), (3,4), (3,5), (3,6), (4,1), (4,2), (4,3), (4,4), (4,5), (4,6), (5,1), (5,2), (5,3), (5,4), (5,5), (5,6), (6,1), (6,2), (6,3), (6,4), (6,5), (6,6). Trong các tổ hợp này ta có tổng 12 chỉ ở cặp (6,6) nên xác suất là 1/36.

Đầu vào: sum = 4 và N = 6 
Đầu ra: xác suất là: 1/2985984

Cách tiếp cận dùng trong chương trình dưới đây –

  • Nhập giá trị sum và N chỉ số lần tung xúc xắc
  • Để tính xác suất xuất hiện sum khi tung 2 xúc xắc N lần áp dụng công thức: (lợi ích/tổng) ^ N
  • Tính xác suất xuất hiện tổng đó khi tung 2 xúc xắc 1 lần, giả sử là 1
  • Để tính xác suất xuất hiện tổng đó khi tung 2 xúc xắc N lần sẽ là –
  • Xác suất2 = (Xác suất 1) ^ N. Tức là Xác suất1 mũ N

Thuật toán

Bắt đầu
Bước 1 -> Khai báo hàm tính xác suất
    int probability(int sum, int times)
    Khai báo và gán float res = 0.0 và total = 36.0
    Khai báo và gán long int probab = 0
    Vòng lặp Với i = 1 đến i <= 6 và i++
        Vòng lặp Với j = 1 đến j <= 6 và j++
            NẾU ((i + j) = sum)
                Gán res++
            Kết thúc
        Kết thúc
    Kết thúc
    Khai báo và gán int gcd1 = __gcd((int)res, (int)total)
    Gán res = res / (float)gcd1
    Gán total = total / (float)gcd1
    Gán probab = pow(total, times)
    trả về probab

Bước 2 -> Trong main()
    Khai báo và gán int sum = 4 và times = 6
    Gọi probability(sum, times)
Kết thúc

Ví dụ mã C++

#include <bits/stdc++.h>
using namespace std;

// Hàm tính xác suất nhận tổng khi tung 2 xúc xắc N lần
int probability(int sum, int times) {
    float res = 0.0, total = 36.0;
    long int probab = 0;
    for (int i = 1; i <= 6; i++) {
        for (int j = 1; j <= 6; j++) {
            if ((i + j) == sum)
                res++;
        }
    }
    int gcd1 = __gcd((int)res, (int)total);
    res = res / (float)gcd1;
    total = total / (float)gcd1;
    probab = pow(total, times);
    return probab;
}

int main() {
    int sum = 4, times = 6;
    cout << "xác suất là: ";
    cout << "1" << "/" << probability(sum, times);
    return 0;
}

Đầu ra

xác suất là: 1/2985984