【蓝桥杯】【猜字母】

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/bear_huangzhen/article/details/78583669

题目
把abcd…s共19个字母组成的序列重复拼接106次,得到长度为2014的串。
接下来删除第1个字母(即开头的字母a),以及第3个,第5个等所有奇数位置的字母。
得到的新串再进行删除奇数位置字母的动作。
如此下去,最后只剩下一个字母,请写出该字母。
答案是一个小写字母,请通过浏览器提交答案。
不要填写任何多余的内容。

分析
首先利用循环得到2014个长度的字符串,将其变成字符数组。
接着使用双重循环,多次对数组进行字母删除行为,循环跳出的条件是数组中只剩下一个字母为止。

源码

    public static void main(String[] args) {
        String s = "abcdefghijklmnopqrs";
        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < 106; i++) {
            sb.append(s);
        }
        //得到长度为2014的字符数组
        char[] a = sb.toString().toCharArray();

        int N = a.length; //记录还剩下多少字母
        //当只剩下一个字母的时候跳出循环
        ok:while (true) {
            boolean  isJi = true;
            for (int i = 0; i < a.length; i++) {
                if(N == 1) {
                    break ok;
                }

                if (a[i] == '0') {
                    //表示此字母已经删除
                    continue;
                }else {
                    if(isJi) {
                        //如果是奇数的位置上
                        a[i] = '0'; //表示删除此字母
                        isJi = false; //下一次遇到的是偶数位置
                        N--; //字母数量-1
                    }else {
                        isJi = true; //下一次遇到的是奇数位置
                    }
                }
            }
        }

        for (int i = 0; i < a.length; i++) {
            if(a[i] != '0') {
                System.out.println(a[i]);
            }
        }
    }

结果
q

猜你喜欢

转载自blog.csdn.net/bear_huangzhen/article/details/78583669