题目:

本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。

把 abcd…s 共19个字母组成的序列重复拼接 106 次,得到长度为 2014 的串。

接下来删除第 1 个字母(即开头的字母 a),以及第 3 个,第 5 个等所有奇数位置的字母。

得到的新字符串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请输出该字母。

运行限制
最大运行时间:1s
最大运行内存: 128M

代码:

public class Main {
public static void main(String[] args) {
int x=0;
char[] arr=new char[2014];
for (int i=0;i<106;i++){
for (int j=0;j<19;j++){
arr[x++]=(char)('a'+j);
}
}
int length=2014;
while(length!=1){
int y=0;
for (int i=1;i<length;i+=2){
arr[y++]=arr[i];
}
length=y;
}
System.out.println(arr[0]);
}
}

思路:

将2014个字母组成的字符串储存在一个char类型的数组中,既然要删除奇数位的字母再重新组成新的字符串,那么我们就将偶数位的字母拿出来往前提放到数组之前,y为所有偶数位字母组成的新字符串的长度,当长度为1时输出数组中第一个字母即可。

例:初始字符串:abcdefghijklmnopqrs

第一轮:bdfhjlnpr jklmnopqrs

第二轮:dhlp jlnprjklmnopqrs

第三轮:hp lpjlnprjklmnopqrs

第四轮:p plpjlnprjklmnopqrs

此时新组成的字符串长度为一结束

输出arr[0]=p;