我的网址:www.javaedu.com.cn

QQ:2535279 


设有N个人围坐在一个圆桌周围,先从第S个人开始报数.数到第M个人出列,
然后从出列的下一个人开始报数,数到第M个人又出列...如此重复,直到所有的人
全部出列为止.对于任意给定的N,S和M,求出出列次序,得到N个人的顺序表

//顺序表实现

public class Test {

      
    public static void main(String[] args){
        
        int[] arr={1,2,3,4,5,6,7,8,9};
        arr=Josephus(3,9,5,arr);
        for(int i=0;i<arr.length;i++)
            System.out.print(arr[i]+" ");
    }
    
   static int[]  Josephus(int s,int n,int m,int[] arr) {
           
           int s1=s;
           
           int temp;
           
           
           for(int i=n;i>=2;i--){
               s1=(s1+m-1)%i;
               temp=arr[s1];
               
               for(int j=s1;j<=i-2;j++)
                   arr[j]=arr[j+1];
               
               arr[i-1]=temp;    
           }
           
           for(int k=0;k<arr.length/2;k++){
               temp=arr[k];
               arr[k]=arr[n-k-1];
               arr[n-k-1]=temp;
           }
               
                 
           return arr;    
       
   } 
}

//链表实现public class JosephusLink{
    public static void main(String[] args){
        int s=3;
        int n=5;
        
        Node head,p,r;
        head=new Node();
        head.data=1;
        head.next=head;
        
        r=head;
        
        for(int i=2;i<=9;i++){
            p=new Node();
            p.data=i;
            p.next=head;
            r.next=p;
            r=p;
            }
        r.next=head;
        //r 是尾指针
            
        
        
        for(int i=1;i<=s;i++){
            r=r.next;
            }
        
        while(r!=r.next){
            for(int i=1;i<n;i++){
                r=r.next;
                }
            System.out.print(r.next.data+" ");
            r.next=r.next.next;
            }
        System.out.print(r.data);
      }
    } 

更多资料尽在网址:www.javaedu.com.cn