背景
约瑟夫环(Josephus)问题的背景可以追溯到公元1世纪,当时犹太历史学家约瑟夫和他的同伴被罗马军队包围。为了避免被俘或杀害,他们决定通过自杀的方式结束生命。为了执行这个决定,他们围成一个圈,然后按照一定的规则来选择自杀的人,直到只剩下最后一个人。这个规则是每次报数到某个固定的数字时,就将当前的人杀掉,然后再由下一个人重新开始报数。
约瑟夫作为一个不愿意自杀的人,快速地计算出了一个位置,使得他成为了最后一个存活的人,从而有机会逃脱。这个问题后来被称为“约瑟夫环”问题,并被广泛应用于计算机科学和数学领域。
题目
已知 n 个人(以编号1,2,3 … n 分别表示)围成一圈。从编号为 1 的人开始报数,数到 m 的那个人出列;他的下一个人又从 1 开始报数,数到 m 的那个人又出列;依此规律重复下去,直到最后剩下一个人。要求找出最后出列的人的编号
方法一:单向循环链表
package com.mobai.study0220;
/**
* @Author Mobai
* @Date 2024/2/20 18:03
* @Version 1.0
*/
class Node {
int number; // 编号
Node next; // 指向下一个节点的引用
public Node(int number) {
this.number = number;
this.next = null;
}
}
class JosephusCircle {
Node head; // 链表头节点
// 添加节点到单向循环链表
public void addNode