约瑟夫环(java面向对象实现)
/*
* 作者:zhaop
* 功能:约瑟夫环
*
*/
public class Joseph {
public static void main(String[] args) {
// TODO Auto-generated method stub
CyLink link = new CyLink();
link.setLen(5);
link.setK(2);
link.setM(2);
link.createLink();
link.show();
link.play();
}
}
class Child
{
int no; // 人的编号
Child nextChild = null; // 指向下一个
public Child(int no)
{
this.no = no;
}
}
class CyLink
{
Child firstChild = null; // 头指针
Child currentChild = null; // 当前指针
int len = 0; // 总人数
int k = 0; // 从第k个人开始数数
int m = 0; // 数m个数
public void setLen(int len)
{
this.len = len;
}
// 设置k
public void setK (int k)
{
this.k = k;
}
public void setM (int m)
{
this.m = m;
}
//初始化环形链表
public void createLink()
{
for (int i = 1; i <= len; i++)
{
Child ch = new Child(i);
if (i == 1) // 第一个时,修改头指针
{
firstChild = currentChild = ch;
}
else
{
if (i == len) // 最后一人的 下一个指针指向 第一个人
{
currentChild.nextChild = ch;
ch.nextChild = firstChild;
currentChild = ch;
}
else
{ // 对其他的人来说,让新创建的对象 放在 当前对象的下一个位置,并让当前对象指向新创建的对象
currentChild.nextChild = ch;
currentChild = ch;
}
}
}
}
//开始游戏
public void play()
{
Child temp = firstChild;
//1.先开始找到数数的人
for (int i = 1; i < k; i++)
{
temp = temp.nextChild;
}
//2.数m下
while (len != 1)
{
//为了便于修改指针,可以数 m - 1下
for (int i = 1; i < m - 1; i++)
{
temp = temp.nextChild;
} //3.将数到m的小孩弄出圈去
// 此时temp是数m-1后的结果,所以要修改temp的下一个指针的
temp.nextChild = temp.nextChild.nextChild;
temp = temp.nextChild;
len--;
}
System.out.println("最后一个小孩是:" + temp.no);
}
// 打印该环形链表
public void show()
{
Child temp = firstChild;
do {
System.out.println(temp.no);
temp = temp.nextChild;
} while (temp != firstChild);
}
}
约瑟夫环(java面向对象实现)的更多相关文章
- j使用数组实现约瑟夫环 java
我们首先来看一下约瑟夫环问题: 给定m个人,m个人围成一圈,在给定一个数n,从m个人中的第一个人每第n个人便将其除去,求被最后一个出去的人的编号. 思路: 建立一个长度为m+1的数组,将其的内容初始化 ...
- 约瑟夫环 java实现
问题: N个人从1到N编号.围城一圈,从1開始报数, 数到X时,将X的编号输出,并将那个人踢出, 下一个从1再開始报数,直到全部人都出去 思路: 就是计数.移除,没有太深的思想,直接上代码: pack ...
- 约瑟夫环 --- 面向对象 --- java代码
约瑟夫环 的 面向对象 解法 罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个 ...
- 约瑟夫环的java解决
总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...
- Java学习之约瑟夫环的两中处理方法
package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...
- 循环列表的Java实现,解决约瑟夫环问题
import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...
- 约瑟夫环问题-Java数组解决
约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. clas ...
- 约瑟夫环简介,问题以及java实现
问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...
- Java实现约瑟夫环问题
约瑟夫环问题起源于一个犹太故事.约瑟夫环问题的大意如下: 罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫.这41个人中,包括历史学家Josephus(约瑟夫)和他的一个朋友.剩余的39个人 ...
随机推荐
- HDU5908 Abelian Period 暴力
题目大意:将一个数组分成长度为k的几个连续区间,如果每个区间内各个元素出现的次数相同,则称k为一个阿贝尔周期,从小到大打印所有阿贝尔周期,数据间加空格. 题目思路:map+暴力 #include< ...
- Loadrunner VuGen实战---基本组成、录制流程、协议、脚本优化、参数化(三)
一.3大基本组件:VuGen.Controller.Analysis 1.VuGen:录制.编写脚本. 2.Controller:性能测试场景设计以及监控的地方. 3.Analysis:生成图表报告的 ...
- java int和Integer的区别
今天偶然和同学讨论到int和Integer的区别是,发现自己对这个问题了解的并不是很清楚,而且有些概念还是错的,所以在这对int和Integer的区别做一个总结. int与integer的区别从大的方 ...
- C++的精髓——虚函数
虚函数为了重载和多态的需要,在基类中是由定义的,即便定义是空,所以子类中可以重写也可以不写基类中的函数! 纯虚函数在基类中是没有定义的,必须在子类中加以实现,很像java中的接口函数! 虚函数 引入原 ...
- android 多个shortCut快捷方式实现以及对58同城快捷方式的实现思路的研究
这几天,项目中有个新需求,需要按照模块添加不同的快捷方式到桌面上,从而方便用户的使用.特意进行了研究并分析了下58上面桌面快捷方式的实现. 首先多个shortcut的实现: <activity ...
- 一个设置 material design icon的插件工具
一个设置 material design icon的插件工具 github地址:https://github.com/konifar/android-material-design-icon-gene ...
- Ubuntu下使用rpm 软件包
Ubuntu的软件包格式是deb,如果要安装rpm的包,则要先用alien把rpm转换成deb. sudo apt-get install alien sudo alien xxxx.rpm #将rp ...
- spring,hibernate配置事务
1. 新建java project 2. 引入jar 3. src下新建package:com.web.model, com.web.dao, com.web.service, bean.xml 4. ...
- JSP内置对象--pageContext对象(非常重要!!!)
pageContext对象是javax.servlet.jsp.PageContext类的实例,只要表示的是一个jsp页面的上下文,而且功能强大,几乎可以操作各种内置对象. >forward(S ...
- SD卡读写扇区注意事项(转)
源:http://blog.163.com/zhaojun_xf/blog/static/30050580201151410635516/ 在调试SD卡时,大家都喜欢使用扇区进行验证.也就是说,一般都 ...