蓝桥杯--猜字母 学到了!
标题:猜字母
把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); } }