鱼C论坛

 找回密码
 立即注册
查看: 3114|回复: 2

[学习笔记] 用Java实现约瑟夫环的。(重新发一遍诶。。。)

[复制链接]
发表于 2020-6-10 21:57:17 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
//作者:铁头娃鸭
//日期: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
Child  tem=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);
            }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-6-10 22:11:32 | 显示全部楼层
还不错哦,继续加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-10 23:29:26 | 显示全部楼层
加油
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-12-22 22:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表