50,542
社区成员
发帖
与我相关
我的任务
分享
import java.util.Scanner;
public class _04_Josephus {
class Node {
int data;
Node next;
Node(int data) {this.data = data;}
}
private Node head;
//private int size; // 元素个数
public _04_Josephus() {
Scanner scan = new Scanner(System.in);
// 读入总人数
int n = scan.nextInt(); scan.nextLine();
// 读入开始的编号
int k = scan.nextInt(); scan.nextLine();
// 读入数到m的那个人出列
int m = scan.nextInt();
// 构造约瑟夫环 <Right>
head = new Node(1); // 注意从1开始
Node node = head;
for (int i = 1; i < n; i++) {
node.next = new Node(i+1);
node = node.next;
}
node.next = head; // 形成环
// 移动tip到指定开始位置 <Right>
Node tip = head;
for (int i = 1; i < k; i++)
tip = tip.next;
// 报数出列
int num = 1;
while (n > 1) {
if (num == m-1) { // 到出列元素的前一个
System.out.println(tip.next.data); // 打印出队编号
tip.next = tip.next.next; // 删除元素
n--; // 个数减1
tip = tip.next;
num = 1; // 重新开始报数
} else {
tip = tip.next;
num++;
}
}
// 输出结果
System.out.println(tip.data);
}
public static void main(String[] args) {
_04_Josephus op = new _04_Josephus();
}
}//end_class