標籤: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); } }}
相對而言第二種更好理解,答案更容易找到
Java演算法試題--猜字母/殺人遊戲