• 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);
            }
        }
    }
    

    相对而言另外一种更好理解。答案更easy找到

    这里写图片描写叙述

  • 相关阅读:
    疫情之下,在家办公靠谱吗?
    假期延长,我们决定送2套测试提升课程给大家充实一下自己
    webdriver的常用方法
    selenium控制浏览器操作方法
    第一个webdriver程序
    selenium元素定位
    启动浏览器
    生成HTML测试报告表格
    pycham设置头文件内容
    Git的指令
  • 原文地址:https://www.cnblogs.com/mengfanrong/p/5325410.html
Copyright © 2020-2023  润新知