第八屆藍橋杯國賽Java b組 填字母遊戲

小明經常玩 LOL 遊戲上癮,一次他想挑戰K大師,不料K大師說:
“我們先來玩個空格填字母的遊戲,要是你不能贏我,就再別玩LOL了”。
K大師在紙上畫了一行n個格子,要小明和他交替往其中填入字母。
並且:
1. 輪到某人填的時候,只能在某個空格中填入L或O
2. 誰先讓字母組成了“LOL”的字樣,誰獲勝。
3. 如果所有格子都填滿了,仍無法組成LOL,則平局。
小明試驗了幾次都輸了,他很慚愧,希望你能用計算機幫他解開這個謎。
本題的輸入格式爲:
第一行,數字n(n<10),表示下面有n個初始局面。
接下來,n行,每行一個串,表示開始的局面。
  比如:“******”, 表示有6個空格。
  “L****”,   表示左邊是一個字母L,它的右邊是4個空格。
要求輸出n個數字,表示對每個局面,如果小明先填,當K大師總是用最強着法的時候,小明的最好結果。
1 表示能贏
-1 表示必輸
0 表示可以逼平
例如,
輸入:
4
***
L**L
L**L***L
L*****L
則程序應該輸出:
0
-1
1
1
資源約定:
峯值內存消耗 < 256M
CPU消耗  < 1000ms


請嚴格按要求輸出,不要畫蛇添足地打印類似:“請您輸入...” 的多餘內容。
所有代碼放在同一個源文件中,調試通過後,拷貝提交該源碼。
注意:不要使用package語句。不要使用jdk1.7及以上版本的特性。
注意:主類的名字必須是:Main,否則按無效代碼處理。
 

package 藍橋杯學習.填字母;

import java.util.Scanner;
//博弈問題
public class lq {
    public static void main(String[] args) {
        Scanner cin = new Scanner(System.in);
        int n = Integer.valueOf(cin.nextLine());
        while (n-- > 0) {
            System.out.println(dfs(cin.nextLine()));
        }

    }

    private static int dfs(String str) {
        if (str.contains("LOL")) {
            return -1;
        }
        if (!str.contains("*")) {
            return 0;
        }
        int ping = 0;
        char[] cs = str.toCharArray();

        for (int i = 0; i < cs.length; i++) {
            if (cs[i] == '*') {//前提這個位置沒有被填
                cs[i] = 'L';//試着填入L
                switch (dfs(new String(cs))) {
                    case -1:
                        return 1;
                    case 0:
                        ping = 1;
            }//如果上面沒有return 1 ,那麼我們再嘗試填入O
                cs[i] = 'O';//試着填入O
                switch (dfs(new String(cs))) {
                    case -1:
                        return 1;
                    case 0:
                        ping = 1;
                }
                //既然這個位置既不能填L,也不能填O,那麼說明這個位置不適合填,那麼讓i++,去嘗試填下一個位置
                cs[i] = '*';//回溯,代表我沒填
            }
        }
        //如果上面的遞歸函數結束了,沒有return 1 ,那麼說明我已經無法贏對手了,那麼這是看能不能平手
        if (ping > 0) {
            return 0;
        }
        return -1;


    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章