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

C ++での特定の再生率に対するn秒後のa、b、およびcのカウント


入力として3つの数値「a」、「b」、および「c」が与えられます。目標は、再現率が次のようになるように、n秒後の「a」、「b」、および「c」のカウント/値を見つけることです。-

  • 2秒ごとにすべての変更がbに変更されます
  • すべてのbは5秒ごとにcに変わります
  • すべてのcは12秒ごとに2aに変わります。

例を挙げて理解しましょう。

入力- n_seconds =62 a =1 b =1 c =1

出力- 与えられた再生率のn秒後のカウントは次のとおりです:0

与えられた再生率に対するn秒後のbのカウントは次のとおりです:33

与えられた再生率に対するn秒後のcのカウントは次のとおりです:1

説明- 60秒後、aは32、b =0、c=0になります。

さらに2秒後、すべてのbはc、c=1になります。すべてaがbになり、b=33。

入力- n_seconds =20 a =1 b =1 c =1

出力- 与えられた再生率のn秒後のカウントは次のとおりです:0

与えられた再生率に対するn秒後のbのカウントは次のとおりです:0

与えられた再生率に対するn秒後のcのカウントは次のとおりです:6

説明

1秒:-a =1、b =1、c =1

2秒:-a =0、b =2(1 + 1)、c=1→2秒後にaからb

4秒:-a =0、b =2、c=1→2秒後にaからb

5秒:-a =0、b =0、c =3(1 + 2)→5秒後にbからc

6秒:-a =0、b =0、c=3→2秒後にaからb

8秒:-a =0、b =0、c=3→2秒後にaからb

10秒:-a =0、b =0、c=3→5秒後にbからc

12秒:-a =6(0 + 2 * 3)、b =0、c=0→12秒後にcから2a

14秒:-a =0、b =6(0 + 6)、c=0→2秒後にaからb

15秒:-a =0、b =0、c =6(0 + 6)→5秒後にbからc

16秒:-a =0、b =0、c=6→2秒後のaからb

18秒:-a =0、b =0、c=6→2秒後にaからb

20秒:-a =0、b =0、c=6→5秒後にbからc

以下のプログラムで使用されているアプローチは次のとおりです

秒のLCMは60(2、5、12)になります。したがって、60秒ごとのa、b、cの変化は次のようになります:

60秒→a=32、b =0、c =0

120秒→a=32 * 32、b =0、c =0

180秒→a=32 * 32 * 32、b =0、c=0。

60の倍数としての秒数については、上記のようにaを計算します。非倍数の場合は、最も近い複数の温度を計算してから、temp + 1から入力秒までトラバースし、mod 2、5、または12を使用して計算します。

  • 数字a、b、cを入力として使用します。
  • n_secondsを秒単位の時間とします。
  • 関数replation_rate(int n_seconds、int a、int b、int c)は、すべてのパラメーターを受け取り、指定された再現率でn秒後のa、b、cのカウントを出力します。
  • temp =n_seconds/60をn_seondsの下の60の倍数とします。
  • 式で与えられるようにa=(int)pow(32、temp)を計算します。 ( temp
  • ここで、temp =60 * tempを更新します。これは、n_seconds以下の60の最も近い倍数です。
  • ここで、forループを使用してi =temp+1からi=n_secondsまでトラバースします。
  • 数値iが2の倍数である場合は、aとaに0を追加してbを更新します。
  • 数値iが5の倍数である場合は、bとbに0を追加してcを更新します。
  • 数値iが12の倍数である場合は、2cとcを0で追加してaを更新します。
  • forループの最後に、a、b、cの最終値を出力します。

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

void reproduction_rate(int n_seconds, int a, int b, int c) {
   int temp = n_seconds / 60;
   a = (int) pow(32, temp);
   temp = 60 * temp;

   for (int i = temp + 1; i <= n_seconds; i++) {
      if (i % 2 == 0) {
         b = b + a;
         a = 0;
      }
      if (i % 5 == 0) {
         c = c + b;
         b = 0;
      }
      if (i % 12 == 0) {
         a = a + (2 * c);
         c = 0;
      }
   }
   cout << "Count of a after n seconds for given reproduction rate is: " << a << "\n";
   cout << "Count of b after n seconds for given reproduction rate is: " << b << "\n";
   cout << "Count of c after n seconds for given reproduction rate is: " << c;
}
int main() {
   int n_seconds = 72;
   int a = 2;
   int b = 1;
   int c = 1;
   reproduction_rate(n_seconds, a, b, c);
   return 0;
}

上記のコードを実行すると、次の出力が生成されます-

出力

Count of a after n seconds for given reproduction rate is: 68
Count of b after n seconds for given reproduction rate is: 0

Count of c after n seconds for given reproduction rate is: 0


  1. C++でN回カットした後の円のピースを数えます

    2D円に適用されるカットの数を表す整数Nが与えられます。各円は、円を2つに分割します。目標は、Nカット後に円の断片を見つけることです。 個数=2*いいえ。カットの 例を挙げて理解しましょう。 入力 − n =1 出力 −円の断片:2 説明 − 入力 − n =3 出力 −円の断片:6 説明 − 以下のプログラムで使用されているアプローチは次のとおりです いくつかのカットにNを使用します。 ピースを取る=1*N。 結果を印刷します。 例 #include <bits/stdc++.h> using namespace st

  2. C++でのT秒後のカエルの位置

    n個の頂点で構成される無向ツリーが1つあるとします。頂点には1からnまでの番号が付けられています。これで、カエルは頂点1からジャンプを開始します。カエルは、現在の頂点から、訪問していない別の頂点に隣接している場合、1秒でジャンプできます。カエルは、訪れた頂点に戻ることはできません。カエルが複数の頂点にジャンプできる場合は、そのうちの1つにランダムにジャンプします 確率が同じ場合、それ以外の場合、カエルが訪問していない頂点にジャンプできない場合、同じ頂点で永久にジャンプします。 ツリーはエッジの配列として与えられます。 t秒後にカエルが頂点ターゲットにいる確率を見つける必要があります。 し