首页 > 其他分享 >循环链表解决约瑟夫问题

循环链表解决约瑟夫问题

时间:2022-11-01 00:56:15浏览次数:47  
标签:num helper people int 约瑟夫 链表 循环 next public

定义人类结构体

public class people {
    int num;
    people next;

    public people(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public people getNext() {
        return next;
    }

    public void setNext(people next) {
        this.next = next;
    }
}

核心代码

public class JosefulLikeList {
        people head;
        public void addpeople(int num)
        {
            if(num<1)
            {
                System.out.println("人数不符合开始规定");
                return;
            }
            people pos=null;
            for(int i=1;i<=num;i++)
            {
               people people= new people(i);
                if(i==1)
                {
                    head = people;
                    pos=head;
                    head.next=head;
                }
                else
                {
                    pos.next=people;
                    people.next=head;
                    pos=people;
                }
            }
        }
        public void showLikelist()
        {
            if(head.next==null)
            {
                System.out.println("不符合规定");
                return;
            }
            people pos=head;
            while(true)
            {
                System.out.println(pos.num);
                if(pos.next==head)
                {
                    break;
                }
                pos=pos.next;
            }
        }
        public void chuquan(int startnum,int all,int ci)
        {

            if(head.next==null||startnum<1||startnum>all)
            {
                System.out.println("不符合标准");
                return;
            }
            people helper=head;
            while(true)
            {
                if(helper.next==head)
                {
                    System.out.println("找到了head的上一个人");
                    break;
                }
                helper=helper.next;
            }
            for(int i=1;i<startnum;i++)
            {
                head=head.next;
                helper=helper.next;
            }
            while(true)
            {
                if(head==helper)
                {
                    System.out.println(head.num);
                    break;
                }
                for(int i=1;i<ci;i++)
                {
                    head=head.next;
                    helper=helper.next;
                }
                System.out.printf("第%d号出圈\n",head.num);
                head=head.next;
                helper.next=head;
            }
            System.out.printf("最后留下来的是%d",head.num);
        }
}

测试

public class test {
    public static void main(String[] args) {
        JosefulLikeList josefulLikeList = new JosefulLikeList();
        josefulLikeList.addpeople(5);
        josefulLikeList.showLikelist();
        josefulLikeList.chuquan(1,5,2);
    }
}

标签:num,helper,people,int,约瑟夫,链表,循环,next,public
From: https://www.cnblogs.com/jinnice/p/16846432.html

相关文章

  • python中的for循环
    #答疑#问题:#1.运行出来的数据不符合#2.报错#写代码要层层递进#作业要写注释啊!!!!!!#1.range()#范围,区间print('1.range()')#range()#起始值,结束,步长......
  • 功能要求:定义一个两行三列的二维数组 names 并赋值,使用二重循环输出二维数组中的元素
    功能要求:定义一个两行三列的二维数组names并赋值,使用二重循环输出二维数组中的元素names={{"tom","jack","mike"},{"zhangsan","lisi","wangwu"}};运行结果效果:代码:public......
  • 单链表输出倒数第k个元素
    这个算法已经有不少人写过了,但是为了考研后期复习还是在此记录一下自己的心得。方法有如下几种:1、遍历单链表两次,第一次获取链表总长度,第二次寻找倒数第K个元素就很简单......
  • 单链表逆序输出
    将单链表逆序输出,有好几种思路。比如:将单链表逆序后输出;或者顺序遍历单链表然后将其存入栈,再用栈来实现;或者就是使用递归。可想而知,递归是最简单的一种方法。因此下面以带......
  • C++ 不知树系列之认识二叉树(顺序、链表存储的实现)
    1.概念什么是二叉树?顾名思义,二叉树指树中的任何一个结点(除叶结点)的子结点不能多于2个。二叉树可分为:一般二叉树。只要符合二叉树的定义便可。满二叉树。满的意......
  • shell脚本之循环语句
    一、echo命令–输出字符串或提取Shell变量的值1、格式2、常用参数 常用的转义字符如下:\b转义后相当于按退格键(backspace),但前提是"\b"后面存在字符;“\b"......
  • ansible循环+判断
    循环1、with_items迭代列表比如Linux中依次需要安装多个软件包时,我们可以使用with_items迭代功能进行实现例如:安装httpd、samba、samba-client软件包时Vimb.yml---......
  • shell编程中的循环语句
    一、for循环 for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done之间),直到所有元素取尽为止。其中,串行是一些字符串的......
  • Java小白翻身教程-链表结构与编译大法(3)
    D盘下面的tool文件夹已经有三个工具类了(其实是两个,CustNode是为了TuziLinkedList服务的),我们这一节来进行打包,这样的好处就是不用每次编译都把tool里面的类也带上了。步骤1......
  • Java算法基础 - 单链表详解(文末有配套视频)
    导航​​步骤1只用Java类能实现吗?​​​​步骤2类里面有顾客属性​​​​步骤3排队打饭​​​​步骤4从一个顾客联系到另一个顾客​​​​步骤5加一个next字段​......