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) + "");
    }
}

 

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