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

C++で2つの整数を使用する奇数ターンゲーム


この問題では、3つの整数値A、B、およびTが与えられます。私たちのタスクは、2つの整数を使用して奇数ターンゲームをプレイするプログラムを作成することです。

2つの整数値は:

T、それはゲームのターン数を示します。
Aはplayer1の値を示します
Bはplayer2の値を示します

Tの値が奇数の場合、Aの値に2を掛けます。
Tの値が偶数の場合、Bの値に2を掛けます。
max(A、B)/ min(A、B)の値を見つけて返す必要があります 最後に。

問題を理解するために例を見てみましょう

入力: A =3、B =4、T =3

出力: 1

説明:

1ターン目:Tは奇数、Aは2倍、A=6です。
2ターン目:Tは偶数、Bは2倍、B=8です。
3ターン目:Tは奇数、Aは2倍、A=12。

A =12 B =4

max(A、B)=max(12、4)=12
min(A、B)=min(12、4)=4
max(A、B)/ min(A、B)=12/8 =1

ソリューションアプローチ:

この問題の簡単な解決策は、Tターン後にAとBの値を計算し、max(A、B)/ min(A、B)の値を返すことです。これは、T回の反復を行うことによる効果的なソリューションです。

ただし、Tの値が偶数の場合、新しいAの値はN * Aであり、新しいBの値はN * Bであるという事実に基づいて、より効果的なソリューションになる可能性があります。

これにより、max(A、B)/ min(A、B)の値は次の定数になります。
max(A、B)/ min(A、B)。

Tの値が奇数の場合、Aの値は2 * N * Aになり、Bの値はN*Bになります。

これにより、max(A、B)/ min(A、B)の値がmax(2A、B)/ min(2A、B)に等しい定数になります。

問題の結果max(A、B)/ min(A、B)=

max(A、B)/ min(A、B)、Tが偶数の場合
max(A、B)/ min(A、B)、Tが奇数の場合

ソリューションの動作を説明するプログラム

#include <iostream>
using namespace std;

int EvenOddGame(int A, int B, int T) {

   if ( T%2 == 0)
      return (max(A, B) / min(A, B));
   else
      return (max(2*A, B) / min(2*A, B));
   return -1;
}

int main() {

   int A = 3, B = 2, T = 3;
   cout<<"The return value of even odd game is "<<EvenOddGame(A, B, T);

}

出力-

The return value of even odd game is 3

  1. C++でゲームIVをジャンプする

    arrという整数の配列があるとします。最初はインデックス0にいます。1つのステップで、インデックスiからi + xにジャンプできます。ここで、i +x =0。jここで:arr[i]とarr[j]は同じであり、iとjは同じではありません。ここで、nは配列のサイズです。配列の最後のインデックスに到達するための最小ステップ数を見つける必要があります。 したがって、入力が次のような場合、 その場合、出力は3になります。インデックス0から4、3から9への3つのジャンプが必要です。 これを解決するには、次の手順に従います- 1つのマップを定義するm n:=arrのサイズ 初期

  2. C++で指定された値を持つ葉を削除する

    二分木と整数のターゲットがあるとすると、値のターゲットを持つすべてのリーフノードを削除する必要があります。親ノードがリーフノードになり、値ターゲットを持つ場合、値ターゲットを持つリーフノードを削除すると、それも削除する必要があることに注意する必要があります(できなくなるまでそれを続ける必要があります)。したがって、ツリーが以下のようになり、ターゲットが2の場合、最終的なツリーは最後のツリーのようになります- これを解決するには、次の手順に従います- remLeaf()と呼ばれる再帰メソッドを定義します。これにより、ルートとターゲットが取得されます ルートがnullの場合、n