博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【Java程序】约瑟夫环
阅读量:4704 次
发布时间:2019-06-10

本文共 928 字,大约阅读时间需要 3 分钟。

今天看视频教程无意间看到了一个数3减1的问题,百度之发现叫约瑟夫环问题,于是写了程序,问题大致描述如下:

一群带有编号的孩子手拉手围成一个圈报数,开始的孩子数1,他右边数2,再右边数3,数到n的孩子out,接着从下一个孩子开始继续数1,数到n的孩子out,如此循环...问最后留下来的孩子是原来的多少号?

我这里用Java写了一个双向回环链表代表围成的圈,其中的Kid是一个链表节点,他有一个左同胞,一个右同胞,还有一个id。双向会还链表定义了添加节点方法add(),删去节点方法delete();队首孩子firstKid,队尾孩子LastKid,还有表的长度count。

class Kidcircle{    private int count;    Kid firstKid;    Kid LastKid;    Kidcircle(int num){        count = 0;        for(int i=0;i

Kid类如下:

class Kid{    Kid left;    Kid right;    int id;}

然后main方法中这么写的,我假设的是数到3淘汰一个孩子,然后一共500人:

public class count3quit {    public static void main(String[] args){        Kidcircle Kc = new Kidcircle(500);        Kid currentKid = Kc.firstKid;        while(Kc.getSize()>1){            Kc.delete(currentKid.right.right);            currentKid = currentKid.right.right;        }        System.out.println(Kc.firstKid.id);    }}

最后结果:436。

有时间还是要多回顾数据结构中的东西。

转载于:https://www.cnblogs.com/jugg1024/p/4209837.html

你可能感兴趣的文章
sql优化之not in
查看>>
Web jquery表格组件 JQGrid 的使用 - 8.Pager、新增数据、查询、刷新、查看数据
查看>>
学习中遇到的问题(前端~)
查看>>
oracle 使用断点调试函数时如何进入被调用的存储过程?
查看>>
静态数组的应用
查看>>
python:面向对象编程
查看>>
Redis 常见配置
查看>>
解决 Invalid signature file digest for Manifest 问题
查看>>
fnd_request.submit_request
查看>>
JavaFX校验IP和端口的合法性
查看>>
C++ Class与Struct的区别
查看>>
MySQL字段之集合(set)枚举(enum)
查看>>
Random类(java.util)
查看>>
poj 1961 Period(KMP训练指南例题)
查看>>
leetcode Sum Root to Leaf Numbers(所有路径之和)
查看>>
poj 2686 Traveling by Stagecoach ---状态压缩DP
查看>>
Rational Rose--简介
查看>>
声明银行账户类,成员变量包括账号,储户姓名,开户时间,身份证号码,存储余额等账户信息...
查看>>
利用isPointInPath()实现canvas小游戏的交互
查看>>
创建简单线程
查看>>