C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++でサイコロをN回投げた後の最大ドット数


与えられたタスクは、M個の面を持つサイコロをN回投げた後に期待できるドットの最大数を計算することです。

サイコロの最初の面には1つのドットが含まれ、2番目の面には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

  1. C ++で指定された操作をq回適用した後、配列内の異なる数の数を見つけます

    この問題では、すべてゼロで構成される配列のサイズである数値Nが与えられ、次のタイプのそれぞれのQクエリが与えられます- このクエリは、すべての要素をsからe(両方を含む)からvalに更新します。 私たちのタスクは、指定された操作をq回適用した後、配列内の異なる数の数を見つけることです。 問題を理解するために例を見てみましょう Input : N = 6, Q = 2 Q1 = update(1, 4, 3) Q2 = update(0, 2, 4) Output : 2 説明 初期配列、arr [] ={0、0、0、0、0、0} arr [] ={0、3、3、3、3、0}

  2. 最大ベンド数のC++パス長

    二分木が与えられる問題を解決するため。次に、曲がりの数が最大のパスを見つける必要があります。つまり、パスの方向が左から右に、またはその逆に変化する場合、たとえば、曲がりが考慮されます 入力- 出力- 6 このアプローチでは、ツリーをトラバースして、以前の動きを追跡します。方向が変わった場合は、曲げカウントを更新するだけで、最大値が見つかります。 解決策を見つけるためのアプローチ このアプローチでは、すべてのパスをトラバースし、回答を更新するベンドの最大数を見つけます。 例 #include <bits/stdc++.h> using namespace std; s