28.蓝桥杯2014第3题猜字母

标题:猜字母

把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());
    }

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容