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

C++で許可されている1つの石の除去を伴うニムのゲーム


ニムのゲームと呼ばれるこの問題では 、石の山を示す正の整数Nが与えられ、2人のプレーヤーがいます「playerA」 および「playerB」 。私たちの仕事は、ゲームオブニムの勝者を予測するプログラムを作成することです。

ニムのゲーム −石の山と2人のプレーヤーがいます「playerA」 および「playerB」「playerA」の場合、各プレーヤーはヒープから1つのストアを選択できます。 ヒープから1つの石を選び始めます。ゲームの勝者を予測する必要があります。ヒープから石を最後に選んだプレーヤーがゲームの勝者です。

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

Input: N = 6
Output: playerB
Explanation :
Total stones = 6, players picking stones as
playerA - playerB - playerA - playerB - playerA - playerB

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

この問題を解決する1つの方法は、Nの値とゲームの勝者の一般式を見つけることです。 Nの値と、それぞれの勝者を見てみましょう。

N =1、勝者=playerA

N =2、勝者=playerB

N =3、勝者=playerA

このことから、Nが奇数の場合、playerAが勝者であることがわかります。 Nが偶数の場合、playerBが勝者です。

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

#include<iostream>
using namespace std;

bool findGameofNimWinner(int N){
   if(N%2 == 0)
      return 0;
   else
      return 1;
}
int main(){

   int N = 26;
   cout<<"The winner of the Game of Nim is ";
   findGameofNimWinner(N) ? (cout << "Player A") : (cout << "Player B");
   return 0;
}

出力

The winner of the Game of Nim is Player B

  1. C++で許可されている他のものとの交換でコストを最小限に抑える

    N個の要素を持つ配列があるとします。与えられた操作に従って、配列から要素を削除する必要があります。操作は、配列の任意の2つの数値を選択し、大きい方を削除する必要があるようなものです。この操作に含まれるコストは、小さい方の数と同じです。この操作に基づいて、一度に1つの要素のみを削除し、最小限のコストでタスクを実行する必要があります。配列に{4、2、5}があるとします。私は4と2を取り、コスト2を支払って4を削除し、次にコスト2で5を削除します。 アプローチは単純すぎます。コストは小さいものと同じになることがわかっているので、コストを削減するために、小さいものと他の要素を取り、大きいものを削除す

  2. C++でデフォルト値が1つある通常の配列の初期化

    配列全体を非常に簡単にゼロに初期化できます。これを以下に示します。 int arr[10] = {0}; ただし、上記の方法を使用して、配列全体をゼロ以外の値に初期化することはできません。これを以下に示します。 int arr[10] = {5}; 上記の例では、最初の要素のみが5に初期化されます。他のすべての要素は0に初期化されます。 forループを使用して、ゼロではない1つのデフォルト値で配列を初期化できます。これを以下に示します。 for(i = 0; i<10; i++) {    arr[i] = 5; } 上記の例では、すべての配列要素が5に初期化