Computer >> Máy Tính >  >> Lập trình >> C ++

Số chấm tối đa sau khi ném xúc xắc N lần trong C ++


Nhiệm vụ được giao là tính số chấm tối đa có thể có sau khi ném một con xúc xắc N lần có M mặt.

Mặt đầu tiên của con xúc xắc có 1 chấm, mặt thứ hai có 2 chấm, v.v. Tương tự như vậy, mặt thứ M chứa M số chấm.

Xác suất xuất hiện của mỗi mặt trở thành 1 / M.

Bây giờ chúng ta hãy hiểu những gì chúng ta phải làm bằng cách sử dụng một ví dụ -

Đầu vào - M =2, N =3

Đầu ra - 1,875

Giải thích - Xúc xắc có 2 mặt ={1, 2}

Nếu xúc xắc được ném 3 lần thì không gian mẫu sẽ là =M N =2 3

{(1, 1, 1), (1, 1, 2), (1, 2, 1), (1, 2, 2,)
(2, 1, 1), (2, 1, 2), (2, 2, 1), (2, 2, 2,)}
Maximum number in (1, 1, 1) = 1
Maximum number in (1, 1, 2) = 2
Maximum number in (1, 2, 1) = 2
Maximum number in (1, 2, 2) = 2
Maximum number in (2, 1, 1) = 2
Maximum number in (2, 1, 2) = 2
Maximum number in (2, 2, 1) = 2
Maximum number in (2, 2, 2) = 2
Probability of each case = 1/23 = 0.125
Therefore, expectation of maximum number = (1+2+2+2+2+2+2+2) * (0.125) = 1.875

Đầu vào - M =2, N =2

Đầu ra - 1,75

Phương pháp tiếp cận được sử dụng trong chương trình dưới đây như sau

  • Có thể tìm thấy số trường hợp tối đa trong đó một số có thể xảy ra bằng cách sử dụng số trước của nó bằng cách sử dụng công thức - i N - (i-1) N .

    Ví dụ:nếu M =4 và N =2, tổng số trường hợp trong đó tối đa =4 sẽ là 4 2 - (4-1) 2 =7.

    Vì vậy, câu trả lời cuối cùng sẽ là áp dụng công thức này trên mọi phần tử từ 1 đến M -

    (i * (i N - (i - 1) N )) / M N và thêm chúng lên.

  • Trong hàm MaxExpect (), hãy khởi tạo một biến max =0 kiểu double để lưu trữ tổng.

  • Sau đó lặp lại từ i =M đến i> 0

  • Bên trong vòng lặp, hãy áp dụng công thức đã nêu ở trên và tiếp tục thêm tất cả các giá trị kết quả vào biến max.

Ví dụ

#include <bits/stdc++.h>
using namespace std;
double MaxExpect(double M, double N){
   double max = 0.0, i;
   for (i = M; i; i--)
      /*formula to find maximum number and
      sum of maximum numbers*/
      max += (pow(i / M, N) - pow((i - 1) / M, N)) * i;
      return max;
}
int main(){
   double M = 2, N = 3;
   cout << MaxExpect(M, N);
   return 0;
}

Đầu ra

Nếu chúng ta chạy đoạn mã trên, chúng ta sẽ nhận được kết quả sau -

1.875