把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。
【答案】:q
解析:这个题只要字符串的总个数>1,那么就把奇数位置的字符删掉,所以只需要写一个可以删除奇数位置的函数并且得到删除后的字符串即可,如果字符串的个数>1则继续删,直到一个字符为止。
代码如下:
public class 猜字母
{
public static String Method(String s)
{
StringBuilder sb = new StringBuilder();
for(int i=0,t=s.length();i<t;++i)
{
if((i+1)%2==0) //奇数位删除
{
sb.append(s.charAt(i));
}
}
return sb.toString(); //返回删除后的字符串
}
public static void main(String[] args)
{
String s = "abcdefghijklmnopqrs"; // a~s
StringBuilder sb = new StringBuilder(); //动态操作字符串
for(int i=0;i<106;++i) //字符串s重复拼接106次
{
sb.append(s);
}
int n = sb.length(); // n = 2014
String str = sb.toString();
while(n!=1) //只剩下最后一个字符时跳出循环
{
str = Method(str); //Method方法返回的是删除掉奇数位置后的字符串
n = str.length(); //n为删除掉奇数位置后的字符串长度
}
System.out.println(str); //输出最后一个字符
}
}