现在的位置: 首页 > 综合 > 正文

跟韩老师学java——Java实现丢手帕问题

2013年12月08日 ⁄ 综合 ⁄ 共 2009字 ⁄ 字号 评论关闭


package FistTest;

public class Demo1 {  
    public static void main(String[] args) {  
       // TODO Auto-generated method stub  
    CycLink cyclink  =new CycLink();  
         cyclink.setLen(100);  
         cyclink.creatLink();  
         cyclink.setK(2);  
         cyclink.setM(2);  
         cyclink.show();  
         cyclink.play();  
    }  
}  
class Child{  
     int no;  
     Child nextChileChild=null;  
     public Child(int no){  
         this.no=no;  
     }     
}  
//环形链表  
class CycLink{     
//先定义一个指向链表第一个小孩的那个引用  
    //指向第一个小孩的引用,不能动  
    Child firstChild=null;  
    Child temp=null;  
    int len=0;//表示共有几个小孩  
    int k;  
    int m;  
    //设置链表大小  
    public void setLen(int len){  
        this.len=len;  
    }  
    public void setK(int k){  
        //设置第几个人开始数数  
        this.k=k;  
    }  
    public void setM(int m){  
        //设置m  
        this.m=m;  
    }  
    public void play(){  
        //1找到开始数数的人         
        Child temp=this.firstChild;  
        for(int i=1;i<k;i++){  
            temp=temp.nextChileChild;      
        }  
        //数M下  
        while(this.len!=1){  
            for (int j = 1; j < m; j++) {  
            temp=temp.nextChileChild;  
        }    
        Child temp2=temp;//找到要出圈的前一个小孩  
        while (temp2.nextChileChild!=temp) {  
        temp2=temp2.nextChileChild;            
        }  
        //讲数到M的小孩 退出圈  
        temp2.nextChileChild=temp.nextChileChild;  
        temp=temp.nextChileChild;  
        System.out.println("现在出圈的是"+temp.no);  
        this.len--;  
        }  
        //打印最优一个小孩  
        System.out.print("最后出圈的是:"+temp.no);  
}  
    //初始化链表  
    public void creatLink(){  
        for (int i = 1; i <= len; i++) {          
            if (i==1) {  
                //创建第一小孩  
                Child child=new Child(i);  
                this.firstChild=child;  
                this.temp=child;  
            }else 
            {  
                if (i==len) {  
                    Child child =new Child(i);  
                    temp.nextChileChild=child;  
                    temp=child;  
                    temp.nextChileChild=this.firstChild;          
                      
                }else {  
         
                //继续创建小孩  
                Child child =new Child(i);  
                temp.nextChileChild=child;  
                temp=child;}  
            }         
              
        }  
          
    }  
    public void show(){  
          
        Child temChild=this.firstChild;  
        do {  
            System.out.println(temChild.no+"###");  
            temChild=temChild.nextChileChild;  
        } while (temChild!=this.firstChild);  
    }  
}

抱歉!评论已关闭.