标题:猜字母
把abcd...s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。
思路:
将a~s19个字母合成一个字符串s
再将字符串s循环106次存入一个ArrayList数组里面
因为s.charAt()方法返回的是char类型,所以 + ""加一个空的字符串来自动转为String类型
一个while循环来判断list的长度是否为1,如果为1就证明剩下一个元素了,停止循环
因为题目要求删除第一个字母......所有奇数位置,因为数组开始的角标是从0开始的,所以我们要删除的是 0 2 4 6 8.....角标,那么我们将所有能将%2==0的角标都设置为 "0",在下一个for循环判断中,只要遇到是0的,都remove删除掉,
注意要 i--,/为什么要i--,因为原来i角标被删除了,后面的所有的元素向前走一位,变成了i角标的元素,所以要i--,然后循环会再i++,这样又可以判断一次i的角标,
答案: q
package 第五届;
import java.util.ArrayList;
public class B3_1 {
public static void main(String[] args) {
char a = 'a';
String s= "";
ArrayList<String> list = new ArrayList<>();
for(int i=0;i<19;i++) {
s+=a++;
}
for(int i=0;i<106;i++) {
for(int j =0;j<s.length();j++) {
list.add(s.charAt(j)+"");
}
}
while(list.size()!=1) {
for(int i=0;i<list.size();i++) {
if(i%2==0) {
list.set(i, "0");
}
}
for(int i=0;i<list.size();i++) {
if(list.get(i)=="0") {
list.remove(i);
i--;//为什么要i--,因为原来i角标被删除了,后一位的元素向前走一位,变成了i角标的元素,所以要i--,然后循环会再i++,这样又可以判断一次i的角标
}
}
}
System.out.println(list.toString());
}
}
网友评论