/*
* 作者: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面向对象实现)的更多相关文章

  1. j使用数组实现约瑟夫环 java

    我们首先来看一下约瑟夫环问题: 给定m个人,m个人围成一圈,在给定一个数n,从m个人中的第一个人每第n个人便将其除去,求被最后一个出去的人的编号. 思路: 建立一个长度为m+1的数组,将其的内容初始化 ...

  2. 约瑟夫环 java实现

    问题: N个人从1到N编号.围城一圈,从1開始报数, 数到X时,将X的编号输出,并将那个人踢出, 下一个从1再開始报数,直到全部人都出去 思路: 就是计数.移除,没有太深的思想,直接上代码: pack ...

  3. 约瑟夫环 --- 面向对象 --- java代码

    约瑟夫环 的 面向对象 解法 罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个 ...

  4. 约瑟夫环的java解决

    总共3中解决方法,1.数学推导,2.使用ArrayList递归解决,3.使用首位相连的LinkedList解决 import java.util.ArrayList; /** * 约瑟夫环问题 * 需 ...

  5. Java学习之约瑟夫环的两中处理方法

    package day_2; import java.util.Scanner; /** * @author Administrator * 约瑟夫环问题: 设编号为 1,2,3,....n的N个人围 ...

  6. 循环列表的Java实现,解决约瑟夫环问题

    import java.util.Scanner; /** * 循环列表的Java实现,解决约瑟夫环问题 * * @author LIU * */ public class LinkedList { ...

  7. 约瑟夫环问题-Java数组解决

    约瑟夫环问题说的是,n个人围成一圈,从第k个人开始沿着一个方向报数,报到第m个人时,第m个人出列,从紧挨着的下一个人(未出列)开始,求整个环中人的出列顺序.下面是我用java实现的解决方法. clas ...

  8. 约瑟夫环简介,问题以及java实现

    问题:一群猴子排成一圈,按1,2,--.,n依次编号.然后从第一只开始数,数到第m只,把它踢出圈,从它后面再开始数,再数到第m只,再把它踢出去-------.,如此不停的进行下去,直到最后只剩下一只猴 ...

  9. Java实现约瑟夫环问题

    约瑟夫环问题起源于一个犹太故事.约瑟夫环问题的大意如下: 罗马人攻占了桥塔帕特,41个人藏在一个山洞中躲过了这场浩劫.这41个人中,包括历史学家Josephus(约瑟夫)和他的一个朋友.剩余的39个人 ...

随机推荐

  1. virt

    www.itwhy.org/linux/debian7-%E5%AE%89%E8%A3%85-kvm-%E8%99%9A%E6%8B%9F%E6%9C%BA.html www.storageonlin ...

  2. ASP MVC之参数传递

    1.URL获取参数  Request.QueryString["XqType"]; 2.表单提交,control层获取参数:Request.Form["XXX" ...

  3. CodeForces 429B Working out 动态规划

    Description Summer is coming! It's time for Iahub and Iahubina to work out, as they both want to loo ...

  4. 大并发大数量中的MYSQL瓶颈与NOSQL介绍

    NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...

  5. m,mm,mmm的用法

    通过查看android源码目录下的build/envsetup.sh文件,可知: - m:       Makes from the top of the tree. - mm:      Build ...

  6. HDU 4828 Grids(卡特兰数+乘法逆元)

    首先我按着我的理解说一下它为什么是卡特兰数,首先卡特兰数有一个很典型的应用就是求1~N个自然数出栈情况的种类数.而这里正好就对应了这种情况.我们要满足题目中给的条件,数字应该是从小到大放置的,1肯定在 ...

  7. .Net多线程编程—Parallel LINQ、线程池

    Parallel LINQ 1 System.Linq.ParallelEnumerable 重要方法概览: 1)public static ParallelQuery<TSource> ...

  8. cordova 启动界面config.xml配置

    <preference name="SplashScreen" value="screen"/> <preference name=" ...

  9. MFC乱七八糟笔记

    1.CBitmap------------------------------------------------------------------------------------- 1.类层次 ...

  10. Javascript面向对象编程(二):构造函数的继承

    这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继承"的五种方法. 比如,现在有一个" ...