约瑟夫问题

设编号分别为:1,2,...,n的n个人围坐一圈。约定序号为k(1 <= k < = n)的人从1开始计数,数到m的那个人出列,他的下一位又从1开始计数,数到m的那个人又出列,依次类推,直到所有人出列为止。

package Josephus;

public class Josephus {
	
	
	public static Node create(int n)
	{
		Node head,p;
		head=new Node();
		p=head;
		int i=1;
		Node s = null;
		if(n!=0)
		{
			while(i<=n)
			{
				s=new Node();
				s.data=i++;
				p.next=s;
				p=s;
			}
			p.next=head.next;
		}
		return p.next;	
	}
	
     public static void main(String args[])
     {
    	 int n=41;
    	 int m=3;
    	 Node temp;
    	 Node p=create(n);
    	 n%=m;
    	 while(p!=p.next)
    	 {
    		 for(int i=1;i");
    		 temp=p.next;
    		 p.next=temp.next;
    		 p=p.next;
    	 }
    	 System.out.println(p.data);
     }
}
public class Node {
	int data;
	Node next;
}



你可能感兴趣的:(算法)