在C ++中掷骰子N次后的最大点数

给定任务是计算N次掷出具有M个面的骰子后可以预期的最大点数。

骰子的第一个面包含1点,第二个面具有2个点,依此类推。同样,第M个面包含M个点。

每张脸出现的概率为1 / M。

现在让我们使用示例了解我们必须做的事情-

输入-M = 2,N = 3

输出-1.875

说明-骰子有2面= {1,2}

如果掷骰子3次,则样本空间将为= 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

输入-M = 2,N = 2

输出-1.75

在以下程序中使用的方法如下

  • 通过使用公式-i N –(i-1)N可以使用其上一个数字找到可以出现数字的最大次数。

    例如,如果M = 4和N = 2,则最大= 4的情况总数为4 2 –(4-1)2 = 7。

    因此,最终答案将是将此公式应用于从1到M的每个元素-

    (i *(i N –(i-1)N))/ M N并将其相加。

  • 在函数中MaxExpect()初始化类型为double的变量max = 0来存储和。

  • 然后从i = M循环直到i> 0

  • 在循环内部应用上述公式,并将所有结果值继续添加到变量max中。

示例

#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;
}

输出结果

如果运行上面的代码,我们将获得以下输出-

1.875