猜字母
把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]);
}
}