蓝桥杯--猜字母 学到了!

  

标题:猜字母

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

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

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

答案是一个小写字母,请通过浏览器提交答案。不要填写任何多余的内容。

这个题首先可以数学方法分析
一列连续正整数无限去除奇数位,最后留下来的肯定是2的N次方中最大的那个,
口算就是1024位 ,
1024除以19取余是17,
17位的字母就是q

编程的话也可以,就是用一个StringBuffer把“abcdefghigklmnopqrs”存106次,然后删除

这个有个比较有趣的地方是,由于delect方法的问题,每次删除掉第i个之后,i后面的都会整体前移一位,所以删除第i个其实是删除了所有奇数位的元素。

public class Main {
    public static void main(String[] args) {
        StringBuffer base = new StringBuffer();
        for (int i = 0; i < 106; i++) {
            base.append("abcdefghigklmnopqrs");
        }
        while (base.length() > 1) {
            for (int i = 0; i < base.length(); i++)
                base.deleteCharAt(i);
        }
        System.out.println(base);
    }
}
原文地址:https://www.cnblogs.com/upstart/p/6677265.html