2017蓝桥杯javaC组模拟题5

标题:报数游戏

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

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

游戏规定,报到数字 m(1 在他(她)的顺时针方向的下一个小朋友(如果有的话)开始重新从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 list = new LinkedList();
        // 初始化数据队列
        for (int i = 1; i <= num1; i++) {
            list.add(i);
        }
        int book = 1;
        while (list.size() > 1) {
            ListIterator it1 = list.listIterator();
            while (it1.hasNext()) {
                it1.next();
                if (book == num2) {
                    it1.remove();
                    book = 1;
                } else {
                    book++;
                }
            }
        }
        return list.get(0);
    }

你可能感兴趣的:(2017蓝桥杯javaC组模拟题5)