//标题:猜字母//把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。//接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。//得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。//答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。public class Main{ public static void main(String[] args) { String s = "abcdefghijklmnopqrs"; String str = ""; for (int i = 0; i < 106; i++) { str += s; } //System.out.println(str.length()); boolean[] flag = new boolean[str.length()]; for (int i = 0; i < flag.length; i++) { flag[i] = true; //未被删除的字母标记为true } int oldIndex = 0; //旧串的下标 int newIndex = 0; //新串的下标 int leftCount = str.length(); //剩余的字母数 while(leftCount > 1){ //最后只剩下一个字母 if (flag[oldIndex] == true) { //如果该字母未被删除 if (newIndex % 2 == 0) { //看此时(新串)的下标是否需要被删除 flag[oldIndex] = false; //删除该字母 leftCount--; //剩余字母数-1 } newIndex++; //未被删除的字母构成新串 } oldIndex++; //旧串的遍历 //得到的新串再进行删除奇数位置字母的动作,所以下标都重新置为0 if (oldIndex == str.length()) { newIndex = 0; oldIndex = 0; } } for (int i = 0; i < flag.length; i++) { if (flag[i] == true) { System.out.println(str.charAt(i)); break; } } }}