歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux編程 >> Linux編程 >> Java實現約瑟夫環

Java實現約瑟夫環

日期:2017/3/1 9:20:08   编辑:Linux編程

什麼是約瑟夫環呢?

約瑟夫環是一個數學的應用問題:已知n個人(以編號1,2,3...n分別表示)圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列;他的下一個人又從1開始報數,數到m的那個人又出列;依此規律重復下去,直到圓桌周圍的人全部出列。

我們用程序說話,實現約瑟夫環:eclipse jdk1.6

package code;

import java.awt.PointerInfo;
import java.util.Random;
import java.util.Scanner;

public class Josephus {
private static class Node{
public int no;
public Node next;

public Node(int no){
this.no = no;
this.next =null;
}
}
public static void main(String[] args){
/*
Scanner input = new Scanner(System.in);
System.out.println("taotal nums");
int totalNum = input.nextInt();
System.out.println("size");
int cycleNum = input.nextInt();*/


Random rand = new Random();
int totalNum = rand.nextInt(30);
int cycleNum =rand.nextInt(5);
if(cycleNum <=1 || cycleNum >= totalNum){
System.out.println("error");
return ;
}
Node header = new Node(1);
Node pointer = header;
for(int i = 2 ;i<= totalNum ;i++){
pointer.next = new Node(i);
pointer = pointer.next;
}
pointer.next = header ;

System.out.println(totalNum +" " + cycleNum);
System.out.println("order output");
while(pointer != pointer.next){
for ( int i =1 ;i <cycleNum ;i++){
pointer =pointer.next;
}
System.out.println(pointer.next.no);
pointer.next = pointer.next.next;
}
System.out.println(pointer.next.no);
}
}

Copyright © Linux教程網 All Rights Reserved