头铁娃子诶 发表于 2020-6-10 21:57:17

用Java实现约瑟夫环的。(重新发一遍诶。。。)

//作者:铁头娃鸭
//日期:2020.6.9
//作用:实现约瑟夫环
public class work6{
public static void main(String args[]){
   CycLink cyclink=new CycLink();
   cyclink.setlen(8);//长度
   cyclink.setk(4);//从第几个小孩开始数
   cyclink.setm(4);//数多少下
   cyclink.create_link();
   cyclink.show();
   cyclink.play();
   
}
}//小孩的类
class Child {
//编号
int no;
//暂时不知道指向那个孩子所以置空,
Child nextchild=null;
public Child (int no){
   this.no=no;
}
}
//环形链表
class CycLink{
// 先定义一个指向链表第一个小孩的的引用(头结点)
Child first_child=null;
Child temp=null;//跑龙套的temp
Childtem=null;//跟着跑龙套的后面的
int len=0;//表示共有几个小孩
int k=0;//从第几个小孩开始数
int m;//数多少下
    //开始创建小孩
public void create_link(){
      for(int i=1; i<=len;i++){
      if(i==1){ //创建第一个小孩
      Child ch=new Child(i);
       this.first_child=ch;
       this.temp=ch;
         }
      else {
            if (i==len){//最后一个小孩
             Child ch=new Child(i);
            temp.nextchild=ch;
                  temp=ch;
               temp.nextchild=this.first_child;
               }
             else {//其余小孩
            Child ch=new Child(i);
            temp.nextchild=ch;
             temp=ch;
                  }
             }
      }
      }
   //开始游戏
public void play(){
          //让tem指向第一个小孩的后面,也就是最后一个小孩(本意就是让tem一直跟在temp后面,这样方便施行让小孩退圈的操作)
            this.tem=this.first_child;
      for(int j=1; j<len;j++){
                tem=tem.nextchild;
                            }
             Child temp=this.first_child;
   //1找到数数的人从第k个小孩开始数
   for (int i=1;i<k;i++){
      
      tem=tem.nextchild;
      temp=temp.nextchild;
   }
   //数m下;
       while(len!=1){
       for (int i=1;i<=m;i++){
          tem=tem.nextchild;
          temp=temp.nextchild;
         }
    //将数到m下的小孩退出圈   
      System.out.print("推出圈的小孩:"+temp.no+" ") ;
      tem.nextchild=temp.nextchild;
      temp=temp.nextchild;
          len--;
            }
          System.out.println("   "+temp.no);   
   }
//初始化循环链表
   public void setk(int k){
    this.k=k;
}
public void setm(int m){
    this.m=m;
}
public void setlen (int len){
   this.len=len;
}

      public void show(){
            Child temp1=this.first_child;
               do{
                  System.out.print(temp1.no);
                     temp1=temp1.nextchild;
                      }while (temp1!=first_child);
            }
}

Hello. 发表于 2020-6-10 22:11:32

还不错哦,继续加油

小甲鱼的铁粉 发表于 2020-6-10 23:29:26

加油
页: [1]
查看完整版本: 用Java实现约瑟夫环的。(重新发一遍诶。。。)