//标题:猜字母
//把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;
}
}
}
}