约瑟夫环(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个人 ...
随机推荐
- 字符串查找 cmd find命令
find /i "ora-" *.log 我对findstr是如此的依赖,以至于当我向各位讲解find命令的时候,我还得老老实实地在cmd窗口中敲下 find /? 这条命令,然后 ...
- JQuery中$.ajax()方法参数详解 (20
url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如put和 ...
- zzuli 1919 数列划分
题面: Description 晴天想把一个包含n个整数的序列a分成连续的若干段,且和最大的一段的值最小,但他有强迫症,分的段数不能超过m段,然后他就不会分了...他想问你这个分出来的和最大的一段的和 ...
- linux的学习系列 1---简介
Linux简介 严格的来讲,Linux 不算是一个操作系统,只是一个 Linux 系统中的内核,即计算机软件与硬件通讯之间的平台:Linux的全称是GNU/Linux,这才算是一个真正意义上的Linu ...
- 编译hadoop2.4
摘自 http://www.aboutyun.com/thread-8130-1-1.html.http://www.dataguru.cn/forum.php?mod=viewthread& ...
- haxe 嵌入swf 读取里面的内容
首先安装 swf 库,运行命令: 命令提示符: haxelib install swf 在project.xml 加上 <!-- 导入swf类库 --> <haxelib name= ...
- STM32F4xx FPU的设置
原文:http://blog.csdn.net/dlutxie/article/details/7980389 浮点运算一直是定点CPU的难题,比如一个简单的1.1+1.1,定点CPU必须要按照IEE ...
- IndentationError: unexpected indent python
都知道python是对格式要求很严格的,写了一些python但是也没发现他严格在哪里,今天遇到了IndentationError: unexpected indent错误我才知道他是多么的严格. 以后 ...
- Viewpager以及ViewPagerIndicator的相关使用
ViewPagerIndicator开源框架可以用来在ViewPager上方做标题,可以在ViewPager下方做跟随移动的小圆点,这个类库必须和自己的项目在电脑的同一磁盘盘符下,比如都在D盘或者E盘 ...
- nodejs实践-MongoDB
nodejs实践-MongoDB laiqun@msn.cn Contents 1. 特点: 2. 开始使用 3. 使用Mongoose操作MongoDB 4. 在express中使用,组织数据库相关 ...