1. 程式人生 > >2014第五屆藍橋杯JAVA本科B組試題第三題猜字母

2014第五屆藍橋杯JAVA本科B組試題第三題猜字母

abcd...s19個字母組成的序列重複拼接106次,得到長度為2014的串。

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

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

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

import java.util.Scanner;



/**
 *   該程式類似與約瑟夫環的問題
 */
public class Main{
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
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
}
}
}
}