標籤:
1 /* 2 把abcd...s共19個字母組成的序列重複拼接106次,得到長度為2014的串。 3 接下來刪除第1個字母(即開頭的字母a),以及第3個,第5個等所有奇數位置的字母。 4 得到的新串再進行刪除奇數位置字母的動作。如此下去,最後只剩下一個字母,請寫出該字母。 5 答案是一個小寫字母,請通過瀏覽器提交答案。不要填寫任何多餘的內容。 6 */
7 public class Main { 8 public static void main(String[] args) { 9 String s = "abcdefghijklmnopqrs";10 String str = "";11 for (int i = 0; i < 106; i++) {12 str += s; //重複拼接13 }14 System.out.println(str.length());15 boolean arr[] = new boolean[str.length()];16 for (int i = 0; i < arr.length; i++) {17 arr[i] = true; //標記字母是否已刪除(false為刪除)18 }19 int i = 0; //舊串(一直是str)的下標20 int countNum = 0; //新串的下標21 int leftNum = str.length(); //刪除後剩下的字母數 22 23 while (leftNum > 1) { //題目描述最後只剩下一個字母24 if (arr[i] == true) { //如果字母未被刪除25 if (countNum % 2 == 0) { //如果新串的下標為偶數26 arr[i] = false; //刪除該字母27 leftNum--; //剩下的字母數-128 }29 countNum++; //遍曆新串(未被刪除的字母構成的串)30 }31 i++; //遍曆舊串(一直是str)32 33 if (i == str.length()) { //如果遍曆完一遍,(題目描述得到的新串再進行刪除奇數位置字母的動作),迴圈刪除34 countNum = 0; //設為0重新開始 35 i = 0;36 }37 }38 for (int j = 0; j < arr.length; j++) {39 if (arr[j] == true) {40 System.out.println(str.charAt(j));41 }42 }43 }44 }
2014第五屆藍橋杯JAVA本科B組_猜字母