java数据结构26:约瑟夫问题

26:约瑟夫问题

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

有n只猴子,按顺时针方向围成一圈选大王(编号从1到n),从第1号开始报数,一直数到m,数到m的猴子退出圈外,剩下的猴子再接着从1开始报数。就这样,直到圈内只剩下一只猴子时,这个猴子就是猴王,编程求输入n,m后,输出最后猴王的编号。

输入

输入包含两个整数,第一个是n,第二个是m (0 < m,n <=300)。

输出

输出包含一行,即最后猴王的编号。

样例输入

12 4

样例输出

1

 

实现代码如下:


import java.util.LinkedList;
import java.util.Scanner;

/**
 * @author baikunlong
 * @date 2020/6/23 10:33
 */
public class Main  {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int n = scanner.nextInt();
        int p = scanner.nextInt();
        LinkedList<Integer> list = new LinkedList<>();
        for (int i = 0; i < n; i++) {
            list.add(i + 1);
        }
        int cNum = 1;
        int delIndex = 0;
        while (list.size() != 1) {
            if (cNum == p) {
//                System.out.print(list.get(delIndex) + " ");
                list.remove(delIndex);
                cNum = 1;
                if (delIndex>0) {
                    delIndex--;
                } else {
                    delIndex = list.size()-1;
                }
            } else {
                cNum++;
            }
            if (delIndex < list.size() - 1) {
                delIndex++;
            } else {
                delIndex = 0;
            }
        }
        System.out.print(list.get(0) + "");
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章