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
-
C++で許可されている他のものとの交換でコストを最小限に抑える
N個の要素を持つ配列があるとします。与えられた操作に従って、配列から要素を削除する必要があります。操作は、配列の任意の2つの数値を選択し、大きい方を削除する必要があるようなものです。この操作に含まれるコストは、小さい方の数と同じです。この操作に基づいて、一度に1つの要素のみを削除し、最小限のコストでタスクを実行する必要があります。配列に{4、2、5}があるとします。私は4と2を取り、コスト2を支払って4を削除し、次にコスト2で5を削除します。 アプローチは単純すぎます。コストは小さいものと同じになることがわかっているので、コストを削減するために、小さいものと他の要素を取り、大きいものを削除す
-
C++でデフォルト値が1つある通常の配列の初期化
配列全体を非常に簡単にゼロに初期化できます。これを以下に示します。 int arr[10] = {0}; ただし、上記の方法を使用して、配列全体をゼロ以外の値に初期化することはできません。これを以下に示します。 int arr[10] = {5}; 上記の例では、最初の要素のみが5に初期化されます。他のすべての要素は0に初期化されます。 forループを使用して、ゼロではない1つのデフォルト値で配列を初期化できます。これを以下に示します。 for(i = 0; i<10; i++) { arr[i] = 5; } 上記の例では、すべての配列要素が5に初期化