2012-02-13 12 views
4

いつか私は2人のプレイヤー(A、B)と4人のスロットを持っていましたが、各プレイヤーはこのスロットに「N」または「O」を入れました。戦略プレーヤーAかプレーヤーBが確実に成功するでしょうか? 私はこれにあまり慣れていないので、彼は以下のケースについていくつかのヒントを与えます、BはAが何を置くかに関係なく成功します。このようなゲームの勝利戦略は何ですか?

[N(A puts)| _ | _ |

最初にこの配列の最初のインデックスにNを入れてから、BはNを最後の位置に置きます。それでAが何をどこに置いても、Bは勝つでしょう。

スロットが7つのスロットに追加されている場合、同じ戦略がありますか?

[_ | _ | _ | _ | _ | _ | _]

私は4つのソルトの場合のように考えましたが、そのような前提条件が必要です。その背後にはいくつかの理論があるかどうかはわかりません。

[N | _ | _ | N | _ | _ | N]

+1

"成功"を達成するためには何をする必要があるかは多岐にわたります。 – dasblinkenlight

+2

あなたのルールは勝利条件を記述していないので、不完全であるか勝利戦略がありません。 –

+2

私たちは適切な質問をして以来、すべてのdownvotesを元に戻しましょう。次回は、これを避けるために投稿する前に完全な質問を書きたいと思うかもしれません。 –

答えて

4

最初のプレーヤーは常にこのゲームに勝つでしょう。 勝利の動きは_ _ _ N _ _ _

7スロットだけですので、このゲームの状態は3^7です。したがって、各状態は動的プログラミングによって容易に計算することができる。ここで私の解決策はC++である

#include <cstdio> 
#include <string> 
#include <map> 
#include <iostream> 
using namespace std; 

map<string, string> mp; 

string go(string s) { 
    if (mp.find(s) != mp.end()) { 
     return mp[s]; 
    } 

    if (s.find("_") == -1) { 
     cout<<s<<" "<<"DRAW"<<endl; 
     return mp[s] = "DRAW"; 
    } 

    string s1 = s; 
    bool draw_found = false; 
    for (int i = 0; i < s.size(); ++i) { 
     if (s[i] == '_') { 
      string t = "NO"; 
      for (int j = 0; j < t.size(); ++j) { 
       s[i] = t[j]; 
       if (s.find("NON") != -1) { 
        cout<<s1<<" WIN by move: "<<s<<endl; 
        return mp[s1] = "WIN"; 
       } 
       string r = go(s); 
       if (r == "LOSE") { 
        cout<<s1<<" "<<" WIN by move: "<<s<<endl; 
        return mp[s1] = "WIN"; 
       } 
       else if (r == "DRAW") { 
        draw_found = true; 
       } 
       s[i] = 'O'; 
      } 
      s[i] = '_'; 
     } 
    } 

    if (draw_found) { 
     cout<<s<<" "<<"DRAW"<<endl; 
     return mp[s] = "DRAW"; 
    } 

    cout<<s<<" "<<"LOSE"<<endl; 
    return mp[s] = "LOSE"; 
} 

int main (void) { 
    string s; 
    for (int i = 0; i < 7; ++i) { 
     s += "_"; 
    } 
    string g = go(s); 
    cout<<g<<endl; 
    return 0; 
} 
+0

あなたのプログラムを理解してから、3^7で可能なすべての値を繰り返して、プレーヤーAがこのゲームに勝つことができるかどうかをチェックしようとしていますか?それらの可能性を最初に計算することを許可されていない場合、どうすればそれを把握できますか? – Ivan

関連する問題