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

C++で指定された確率に従って3つの数値のいずれかを生成する関数を記述します


この問題では、与えられた確率に基づいて3つの数値を生成する関数を作成する必要があります。

このために、組み込みの乱数ジェネレーター関数であるrand(a、b)を使用します。これは、[a、b]の範囲内の乱数を等しい確率で生成します。

私たちのタスクは、確率P(A)+ P(B)の定義に従って、それぞれP(A)、P(B)、P(C)として発生する確率を持つ3つの数値A、B、Cのみを返すことです。 + P(C)=1。

rand(a、b)を使用して関数を作成します。 aからbまでの任意の数の発生確率が同じであるというその機能を使用します。ただし、確率P(A)などでAを取得する必要があります。したがって、このために、数値の確率のパーセンテージを使用します。つまり、P(A)=1/5の場合、20%として扱います。

したがって、最大確率のパーセンテージは100%になるため、0から100までの乱数を生成し、生成された数に基づいて、次の条件に基づいてA、B、Cの間の数を返します。

ケース1 −生成された数値が0からP(A)の間にある場合は、Aを返します。

ケース2 −生成された数値がP(A)とP(A)+ P(B)の間にある場合は、Bを返します。

ケース3 −生成された数値がP(A)+ P(B)と1 {P(A)+ P(B)+ P(C)}の間にある場合は、Cを返します。

コンセプトを明確にする例を見てみましょう。

入力

A = 3 , P(A) = 35%
B = 43, P(B) = 50%
C = 90, P(C) = 15%

プログラムが戻ります

rand関数が0から35までの数値を生成する場合は3。

rand関数が35から85の間の数を生成する場合は43。

rand関数が85から100の間の数値を生成する場合は90。

ロジックの実装を示すプログラム

#include<iostream>
using namespace std;
int randomABC(int A, int B, int C, int PA, int PB, int PC){
   int randNumber = rand()%100+1;
   if (randNumber <= PA)
   return A;
   if (randNumber <= (PA+PB))
   return B;
   else
   return C;
}
int main(){
   cout<<"Random number between 3, 45, 90 with given probabilities is : "<<randomABC(3, 43, 90, 35, 40, 25);
   return 0;
}

出力

Random number between 3, 45, 90 with given probabilities is : 3

  1. C++の特定の範囲で「M」で割り切れる数を数えます

    A、B、Mの3つの数字が与えられます。AとBは、数字の範囲[A、B]を定義します。目標は、Mで割り切れるAとBの間の数字を数えることです。 i =AからMの最初の倍数まで開始します。i%M=0の場合はカウントを増やします。次に、iをi<=バンド増加カウントまでインクリメントします。 例を挙げて理解しましょう。 入力 A=11,B=20, M=5 出力 Count of numbers divisible by M in given range: 2 説明 15と20は、5で割り切れる数であり、範囲[11,20]にあります。 入力 A=20, B=50, M=11 出力 Count of

  2. C++で指定された条件でグリッドに8つの数字を入力します

    1、2、3、4、5、6、7、8を、指定された図の8つの円に配置するとします。このようにして、シーケンス内で隣接する番号に隣接する番号はありません。 したがって、入力が次のような場合 0 - 1 - 1 0 - 1 - 1 - 1 - 1 0 - 1 - 1 0 その場合、出力は次のようになります これを解決するには、次の手順に従います- N:=3、M:=4 考慮されていません:=-1 関数present_in_grid()を定義します。これには、grid [N] [M]、num、が必要です。