韩顺平老师JAVA约瑟夫丢手绢问题用双向链表解决

package com.kangle;

public class Demo4_1 {

    public static void main(String[] args)
    {
      long starttime = System.currentTimeMillis();
      Cyslinkt Cys=new Cyslinkt();
      Cys.setCys(9);
      Cys.setk(2);
      Cys.setm(2);
      Cys.crateCys();
      Cys.show();
      Cys.play();
      long time2 = System.currentTimeMillis();
      System.out.println("玩游戏共用了" + (time2 - starttime)/1000.0 + "秒");
    }
    

}

class childt
{
int no;
childt lastchild;
childt nextchild;
public  childt(int no)
    {
        this.no=no;
    }
}

class Cyslinkt
{
 int len;
 int k;
 int m;
 childt fistchild;
 childt endchild;
 childt tmp;
 public void setCys(int len)
 {
     this.len=len;
 }
 
 public void setk(int k)
 {
     this.k=k;
 }
 
 public void setm(int m)
 {
     this.m=m;
 }
 
 public void crateCys()
 {
     for(int i=1;i<=this.len;i++)
     {
         if(i==1)
         {
            childt ch=new childt(i);
            ch.lastchild=ch;
            ch.nextchild=ch;
            this.fistchild=ch;
            this.tmp=ch;
         }
         else
         {
             if(i==len)
             {
                 childt ch=new childt(i);
                 this.endchild=ch;
                 tmp.nextchild=ch;
                 ch.lastchild=tmp;
                 ch.nextchild=fistchild;
                 tmp=ch;
                 fistchild.lastchild=endchild;
             }
             else
             {
                 childt ch=new childt(i);
                 ch.lastchild=tmp;
                 tmp.nextchild=ch;
                 tmp=ch;
                
                 
             }
             
         }
     }
     
 }

 public void play()
 {
     childt tmp3=this.fistchild;
     for (int i =1;i<k;i++)
     {
         tmp3=tmp3.nextchild;
     }
     while(len!=1)
     {
     for (int i =1;i<m;i++)
     {
         tmp3=tmp3.nextchild;
     }
     
     System.out.println(tmp3.no+"is out");
     tmp3.lastchild.nextchild=tmp3.nextchild;
     tmp3.nextchild.lastchild=tmp3.lastchild;
     len--;
     tmp3=tmp3.nextchild;
     }
     System.out.println(tmp3.no+"留下了");
     System.out.println(tmp3.no+"下个"+tmp3.nextchild.no+"上个"+tmp3.lastchild.no);
 }
 
 public void show()
 {
     childt tmp2=fistchild;
     do
     {
         System.out.println(tmp2.no+"下个"+tmp2.nextchild.no+"上个"+tmp2.lastchild.no);
         tmp2=tmp2.lastchild;
     }while(tmp2!=fistchild);
 }

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值