1. 程式人生 > >2014 第五屆藍橋杯 03 猜字母(java)

2014 第五屆藍橋杯 03 猜字母(java)

猜字母

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


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

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

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

結果:
q

思路:

先將2014個字元放到char型別的陣列中,將序列中偶數位置的數放在陣列前面,直到記錄的長度為1,輸出序列中第一個數即為答案。

注意:

下面的程式碼中,k++是k先不自加,執行完當前操作後再加1,++k正好相反。所以k是從0開始的。

程式碼如下:

import java.util.Scanner;

public class Main {
	
	public static void main(String[] args) {
		String s  = "abcdefghijklmnopqrs";
		String ss = "";
		for(int i=1;i<=106;i++){
			ss+=s;//重複拼接106次
		}
		char[] arr = ss.toCharArray();
		int len = arr.length;
		while(len!=1){
			int k=0;
			for(int i=0;i<len;i++){
				if(i%2!=0){//得到每一次重新排列的偶數列
					arr[k++]=arr[i];//把偶數列移動到最前面
				}else{
					len--;
				}
			}
		}
		System.out.println(arr[0]);
	}
}