打印本文 打印本文  关闭窗口 关闭窗口  
约瑟夫环算法的Java实现代码
作者:佚名  文章来源:不详  点击数  更新时间:2008/4/18 14:41:57  文章录入:杜斌  责任编辑:杜斌

  相信大家都知道这是一个著名的算法问题,约瑟夫环的c语言实现是利用了指针链表的形式,java实现呢,我的这个是用了内部类.
  算法描述:n个人围成一圈,每人有一个各不相同的编号,选择一个人作为起点,然后顺时针从1到k数数,每数到k的人退出圈子,圈子缩小,然后从下一个人继续从1到k数数,重复上面过程。求最后推出圈子的那个人原来的编号。

程序实现:
public class JosephCircle {   
    private class Node {   
        public Node nextnode;   
  
        public boolean flag;   
    }   
  
    private Node[] list;   
  
    public JosephCircle() {   
        list = new Node[30];   
        int i;   
        for (i = 0; i < 30; i++) {   
            Node node = new Node();   
            node.flag = true;   
            if (i > 0) {   
                list[i - 1].nextnode = node;   
            }   
            list[i] = node;   
        }   
        list[i - 1].nextnode = list[0];   
    }   
  
    public void start() {   
        Node node = list[29];   
        for (int i = 0; i < 135; i++) {   
            if ((i+1) % 8 == 0) {    
                 node.flag = false;   
                node.nextnode = node.nextnode.nextnode;   
            } else {   
                node = node.nextnode;   
            }   
        }   
    }   
  
    public void print() {   
        Node node = list[29];   
        for (int i = 0; i < 30; i++) {   
            if (node.flag) {   
                System.out.print("#");   
            } else {   
                System.out.print("@");   
            }   
            node = node.nextnode;   
        }   
    }   
  
    public static void main(String[] args) {   
        JosephCircle jc = new JosephCircle();   
        jc.start();   
        jc.print();   
    }   
}  

打印本文 打印本文  关闭窗口 关闭窗口