码迷,mamicode.com
首页 > 编程语言 > 详细

Josephus环类问题,java实现

时间:2015-11-06 19:16:53      阅读:232      评论:0      收藏:0      [点我收藏+]

标签:

  写出一个双向的循环链表,弄一个计数器,我定义的是到三的时候,自动删除当前节点,很简单。

  

package Com;

import java.util.Scanner;

/*
 * 约瑟夫环问题,有n个人组成的圈,数到3的那个人出列,下个人继续从一开始
 */


public class Josephus {
    
    public static void main(String[] args) {
        Scanner s = new Scanner(System.in);
        int n = Integer.parseInt(s.nextLine());
        Node first = new Josephus().startRun(n );
        int count = 1;
        while(first.next != first) {
            first = first.next;
            count++;
            if(count == 3) {
                first.previous.next = first.next;
                first.next.previous = first.previous;
                first = first.next;
                count = 1;
            }
        }
        System.out.println("最后剩下来的数字为:"+first.n);
    }
    
    public Node startRun(int n) {
        Node first = new Node();
        first.previous = null;
        first.n = n ;   //这里给链表赋值,倒叙
        Node current = first;
        Node last = first;
        while((--n)>0) {
            current.next = new Node();
            current = current.next;
            current.n = n;
            current.previous = last;
            last = current;
        }
        current.next = first;
        first.previous = current;
        return first;
    }
    class Node {
        int n ; 
        Node next;
        Node previous;
    }
}

 

Josephus环类问题,java实现

标签:

原文地址:http://www.cnblogs.com/xiangxi/p/4943238.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!