美文网首页
约瑟夫杀人法

约瑟夫杀人法

作者: 耳_总 | 来源:发表于2016-11-02 17:52 被阅读88次

    约瑟夫杀人法是这样一个场景:一群人手拉手围成一个圈,依次数数,数到特定的数的那个人就被枪毙,然后他的前后的人手拉手,最后只剩下一个人。这种就是数据结构中的单向循环列表模型。

    /**
     * 约瑟夫杀人法
     * @author Luffy
     *
     */
    public class Joseph {
        
        public static int M=20;
        public static int N=5;
    
        /**
         * @param args
         */
        public static void main(String[] args) {
            //创建一个循环单向链表:
            Node head = new Node(1);
            Node node = head;
            for(int i=2;i<=M;i++){
                Node n = new Node(i);
                node.next = n;
                node = n;
                if(i==M) {
                    node.next = head;
                }
            }
            //注意node的初始位置,这个随你定
            int i=1;
            while(node.next != node) {
                if(i%4 == 0) {//数到4,将后一个枪毙
                    System.out.println("kill:"+node.next.data);
                    node.next = node.next.next;
                }
                node = node.next;
                i++;
            }
            System.err.println("剩下:"+node.data);
        }
        
        static class Node{
            public int data;
            public Node next;
            Node(int data) {
                this.data = data;
            }
        }
    
    }
    
    
    kill:4
    kill:9
    kill:14
    kill:19
    kill:5
    kill:11
    kill:17
    kill:3
    kill:12
    kill:20
    kill:8
    kill:18
    kill:10
    kill:2
    kill:16
    kill:15
    kill:1
    kill:7
    kill:13
    剩下:6
    

    相关文章

      网友评论

          本文标题:约瑟夫杀人法

          本文链接:https://www.haomeiwen.com/subject/twavuttx.html