📄 josephus2.java
字号:
/*求解约瑟夫(josephus)问题,用数组实现*/
import java.io.*;
public class Josephus2{
static CursorNode[] cursorSpace;
public void josephus(int n,int m){
cursorSpace=new CursorNode[n];
for(int i=0;i<n;i++)
cursorSpace[i]=new CursorNode(i+1,i+1);
cursorSpace[n-1].next=0;//初始化N个节点的伪循环链表
int p=n-1;
for(int i=0;i<n;i++){
for(int j=1;j<m;j++)
p=cursorSpace[p].next;//跳过M个节点
System.out.println(cursorSpace[cursorSpace[p].next].element);
cursorSpace[p].next=cursorSpace[cursorSpace[p].next].next;
//删除并打印
}
System.out.println("第"+cursorSpace[p].element+"个将赢得环球旅行.");
}
public static void main(String args[]){
Josephus2 jose=new Josephus2();
int m=0,n=0;
try{
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
System.out.println("输入总人数:");
n=Integer.parseInt(in.readLine());
System.out.println("输入间隔");
m=Integer.parseInt(in.readLine());
}
catch(IOException e){
System.out.println(e);
}
jose.josephus(n,m);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -