标题:猜字母
把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。
解析:
//准备题目要求的2014个字符组成的字符串
String s = "";
for (int i = 1; i <= 106; i++)
s += "abcdefghijklmnopqrs";
//将字符串中所有字符存储list集合中
List<Character> list = new ArrayList<Character>();
for (int i = 0; i < s.length(); i++) {
list.add(s.charAt(i));
}
//利用死循环不停的执行删除1,3,5,7位置的数据
while(true)
{
//给需要删除的元素做标记,需要删除的元素值全部变成0
//此处如果不做标记直接删除,集合的下标在删除过程中是动态变化的与题意不符
for (int i = 0; i < list.size(); i=i+2)
list.set(i, '0');
//删除元素内容为'0'的元素
for (int i = 0; i < list.size(); i++)
{
if(list.get(i) == '0')
list.remove(i);
}
//判断只有一个元素的时候得到答案
if(list.size() == 1)
{
System.out.println(list.get(0));
break;
}
}