美文网首页
2017蓝桥杯javaC组模拟题5

2017蓝桥杯javaC组模拟题5

作者: LinkedIn | 来源:发表于2017-03-19 21:07 被阅读0次

    标题:报数游戏

    有 n (1<n<10000)个小朋友站成一个圆圈。
    选定一个小朋友为1号,从他(她)开始顺时针编号:1,2,3,4,...

    游戏开始! 从1号小朋友起,顺时针报数,从1报起。
    即:1号小朋友报1,2号小朋友报2,3号小朋友报3, ....

    游戏规定,报到数字 m(1<m<100) 的小朋友立即退出报数圈。
    在他(她)的顺时针方向的下一个小朋友(如果有的话)开始重新从1报数...
    游戏这样一直进行下去,直到圈中只剩下一个小朋友。

    求最后剩下的小朋友的编号。

    输入:两个整数,n 和 m, 用空格分开。含义如上。

    输出:一个整数,表示最后剩下的小朋友的编号。

    比如:
    输入:
    15 3
    程序应该输出:
    5

    再比如:
    输入:
    7 4
    程序应该输出:
    2

    资源约定:
    峰值内存消耗(含虚拟机) < 256M
    CPU消耗 < 1000ms

    数学解法

    static int k=1;
        public static void main(String[] args) {
            
    
        }
        @SuppressWarnings("unused")
        private static void M1() {
            Scanner input = new Scanner(System.in);
            int int1 = input.nextInt();
            int int2 = input.nextInt();
            int s=0;
            for(int i=2;i<=int1;i++)  
            {  
             s=(s+int2)%i;  
            }  
            System.out.println(s+1);
            input.close();
        }
    
    

    链表解法

        private Integer yueSeFu(int num1, int num2) {
            LinkedList<Integer> list = new LinkedList<Integer>();
            // 初始化数据队列
            for (int i = 1; i <= num1; i++) {
                list.add(i);
            }
            int book = 1;
            while (list.size() > 1) {
                ListIterator<Integer> it1 = list.listIterator();
                while (it1.hasNext()) {
                    it1.next();
                    if (book == num2) {
                        it1.remove();
                        book = 1;
                    } else {
                        book++;
                    }
                }
            }
            return list.get(0);
        }
    

    相关文章

      网友评论

          本文标题:2017蓝桥杯javaC组模拟题5

          本文链接:https://www.haomeiwen.com/subject/vsyvnttx.html