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

最初のプレーヤーがC++で文字ごとに文字列を形成できるゲームに勝つことができるかどうかを確認するプログラム


単語のリストがあるとします。次に、2人のプレイヤーが参加できるゴーストゲームについて考えてみましょう。ここでは、プレーヤーは文字列に文字を交互に追加します。また、作成される文字列は、リスト内の単語の有効なプレフィックスである必要があり、リスト内の単語を綴るプレーヤーは負けます。両方のプレーヤーが最適にプレーしているかどうか、最初のプレーヤーが勝つことができるかどうかを確認する必要があります。

したがって、入力がwords =["manage"、 "manager"、 "min"]の場合、-

のように再生できるため、出力はTrueになります。
  • m[プレーヤー1]
  • ma[プレーヤー2]
  • 男[プレーヤー1]
  • マナ[プレーヤー2]
  • 管理[プレーヤー1]
  • [プレーヤー2]を管理する

つまり、プレーヤー1が勝ちます。

これを解決するには、次の手順に従います-

  • 1つのマップmpを定義する
  • 単語ごとに、
    • ch:=it [0]
    • それをmp[ch]に挿入します
  • mn:=inf
  • キーと値のペアごとにmpで実行し、
    • str:=その値
    • size:=strのサイズ
    • サイズmod2が0と同じ場合、-
      • 1を返す
    • 0を返す

例(C ++)

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

#include <bits/stdc++.h>
using namespace std;
bool solve(vector<string> &words) {
   map<char, set<string>> mp;
   for (auto &it : words) {
      char ch = it[0];
      mp[ch].insert(it);
   }
   int mn = INT_MAX;
   for (auto &it : mp) {
      string str = *(it.second.begin());
      int size = str.size();
      if (size % 2 == 0)
         return 1;
   }
   return 0;
}
int main(){
   vector<string> v = {"manage", "manager", "min"};
   cout << solve(v);
}

入力

{"manage", "manager", "min"}

出力

1

  1. Pythonで最初のプレイヤーが他のプレイヤーよりも多くのキャンディーを取ることができるかどうかを確認するプログラム

    キャンディーと呼ばれる番号のリストがあり、2人が最も多くのキャンディーを集めるために競争しているとします。ここでは、レースはターンベースで、人1が最初に開始し、各ターンで、前または後ろからキャンディーを拾うことができます。人1が他の人よりも多くのキャンディーを集めることができるかどうかを確認する必要があります。 したがって、入力がキャンディー=[1、4、3、8]のようである場合、出力はTrueになります。これは、人1が最初のラウンドで8個のキャンディーを取ることができ、2人目が1または3を選ぶかどうかに関係なく、人1残りのキャンディーを取ることで勝つことができます。 これを解決するには、次

  2. 最初のプレイヤーがPythonでキャンディーリムーブゲームで勝つかどうかを確認するプログラム?

    キャンディーと呼ばれる番号のリストがあり、誰かが友人とゲームをしているとします。各ラウンドで、プレーヤーは同じ値の2つの連続したキャンディーを取り除くことができます。そして、キャンディーを手に入れることができない人は誰でも負けて、そのplayer1が最初に開始するので、player1が勝つかどうかを確認する必要があります。 したがって、入力がnums =[2、2、5]の場合、出力はTrueになります。まるで、player1が2を選択した場合、他のプレーヤーはキャンディーを選択できません。 これを解決するには、次の手順に従います。 スタック:=新しいスタック ターン:=0