歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Java實現約瑟夫環

什麼是約瑟夫環呢?

約瑟夫環是一個數學的應用問題:已知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