1. 程式人生 > >Java演算法試題--猜字母/殺人遊戲

Java演算法試題--猜字母/殺人遊戲

題目如下:

把abcd…s共19個字母組成的序列重複拼接106次,得到長度為2014的串。

接下來刪除第1個字母(即開頭的字母a),以及第3個,第5個等所有奇數位置的字母。

得到的新串再進行刪除奇數位置字母的動作。如此下去,最後只剩下一個字母,請寫出該字母。

答案是一個小寫字母,請通過瀏覽器提交答案。不要填寫任何多餘的內容。

public class 猜字母 {

    public static void main(String[] args) {

        String str = "abcdefghijklmnopqrs";
        String str1 = ""
; for (int i = 0; i < 106; i++) { str1 = str1 + str; } System.out.println(str1.length()); boolean[] arr = new boolean[str1.length()]; for (int i = 0; i < arr.length; i++) { arr[i] = true;// 下標為TRUE時說明字母還在圈裡 } int leftCount = str1.length(); int
countNum = 0; int index = 0; while (leftCount > 1) { if (arr[index] == true) {// 當在圈裡時 if (countNum % 2 == 0) {// 下標為偶數時 arr[index] = false;// 該字母退出圈子 leftCount--;// 剩餘字母數目減一 } countNum++; } index
++;// 每報一次數,下標加一 if (index == str1.length()) {// 是迴圈數數,當下標大於n時,說明已經數了一圈, index = 0;// 將下標設為零重新開始。 countNum = 0; } } // 打印出最後一個 for (int i = 0; i < str1.length(); i++) { if (arr[i] == true) { System.out.println(i);// 輸出結果表示下標為1023(第1024個)的字母,即:q } } } }

第二種解法:

public class 猜字母1 {
    public static void main(String[] args) {
        String str2 = "";

        String str = "abcdefghijklmnopqrs";
        for (int i = 0; i < 105; i++) {
            str = str + "abcdefghijklmnopqrs";
        }

        System.out.println(str.length());

        while (str.length() != 1) {
            for (int i = 0; i < str.length(); i++) {
                if (i % 2 == 1) {
                    str2 += str.charAt(i);
                }
            }
            str = str2;
            str2 = "";
            System.out.println(str);
        }
    }
}

相對而言第二種更好理解,答案更容易找到

這裡寫圖片描述