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

C++のニムゲーム


別のプレーヤーとNimGameというゲームをプレイしているとします。石の山があり、1人のプレイヤーが交代で1〜3個の石を取り除くたびに。最後の石を取り除いた方が勝者となります。 Player1は最初のターンで石を取り除きます。どちらのプレイヤーも非常に賢く、ゲームに最適な戦略を持っています。ヒープ内の石の数を考慮して、player1がゲームに勝つことができるかどうかを判断するためのアルゴリズムを考案する必要があります。

つまり、入力が5の場合、5つの石があるため、出力はtrueになります。したがって、最初に、player1が1つの石を取る場合、2番目のプレーヤーは1〜3の石を取ることができます。 、player2のターン後に少なくとも1つの石が残っているので、player1が勝つことができます。

これは、1つの簡単な手順で解決できます-

  • n mod 4が0と同じでない場合はtrueを返し、そうでない場合はfalseを返します

理解を深めるために、次の実装を見てみましょう-

#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
   bool canWinNim(int n) {
      return n%4!=0;
   }
};
main(){
   Solution ob;
   cout << (ob.canWinNim(5));
}

入力

5

出力

1

  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++でゲームVをジャンプする

    arrと呼ばれる整数の配列と整数dがあるとします。 1つのステップで、インデックスiから-にジャンプできます。 i + xここで、i +x