码迷,mamicode.com
首页 > 编程语言 > 详细

Java算法试题--猜字母/杀人游戏

时间:2015-03-18 21:52:18      阅读:245      评论:0      收藏:0      [点我收藏+]

标签:java算法   猜字母   

题目如下:

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

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

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

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

public class 猜字母 {

    public static void main(String[] args) {

        String str = "abcdefghijklmnopqrs";
        String str1 = "";
        for (int i = 0; i < 106; i++) {
            str1 = str1 + str;
        }
        System.out.println(str1.length());
        boolean[] arr = new boolean[str1.length()];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = true;// 下标为TRUE时说明字母还在圈里
        }

        int leftCount = str1.length();
        int countNum = 0;
        int index = 0;
        while (leftCount > 1) {
            if (arr[index] == true) {// 当在圈里时
                if (countNum % 2 == 0) {// 下标为偶数时
                    arr[index] = false;// 该字母退出圈子
                    leftCount--;// 剩余字母数目减一
                }
                countNum++;
            }
            index++;// 每报一次数,下标加一

            if (index == str1.length()) {// 是循环数数,当下标大于n时,说明已经数了一圈,
                index = 0;// 将下标设为零重新开始。
                countNum = 0;
            }
        }
        // 打印出最后一个                                                                                                                                                                                   
        for (int i = 0; i < str1.length(); i++) {
            if (arr[i] == true) {
                System.out.println(i);// 输出结果表示下标为1023(第1024个)的字母,即:q
            }
        }
    }
}

第二种解法:

public class 猜字母1 {
    public static void main(String[] args) {
        String str2 = "";

        String str = "abcdefghijklmnopqrs";
        for (int i = 0; i < 105; i++) {
            str = str + "abcdefghijklmnopqrs";
        }

        System.out.println(str.length());

        while (str.length() != 1) {
            for (int i = 0; i < str.length(); i++) {
                if (i % 2 == 1) {
                    str2 += str.charAt(i);
                }
            }
            str = str2;
            str2 = "";
            System.out.println(str);
        }
    }
}

相对而言第二种更好理解,答案更容易找到

技术分享

Java算法试题--猜字母/杀人游戏

标签:java算法   猜字母   

原文地址:http://blog.csdn.net/xlgen157387/article/details/44421333

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!