约瑟夫环(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个人 ...
随机推荐
- mybatis 的一点问题
写法1: public User queryUserByUsername(String username); 写法2: public User queryUserByUsername(@Par ...
- Windsock套接字I/O模型学习 --- 第二章
1. select模型 select模型主要借助于apiselect来实现,所以先介绍一下select函数 int select( int nfds, // 忽略,仅是为了与 Berkeley 套接字 ...
- hiho#1128 : 二分·二分查找
input 1<=n<=1e6 1<=k<=2*1e9 a1 a2 ... an 1<=an<=2*1e9 output k存在则输出k是第几大的数,否则输出-1 ...
- 视频 -> 帧 浅析
原创:转载请注明出处 关于帧率 首先以下几个概念必须弄清楚 1.一个帧就是一个画面 2.视频有无数个帧组成 3.表达时间的量 CMTime 的定义: typedef struct { CMTimeV ...
- python 第三方库下载
C:\Python27\Scripts 路径下: easy_install.exe: C:\Python27\Scripts>easy_install.exe pycrypto pip.exe: ...
- IDL 遍历 XML文档示例
IDL解析XML文档同样也有2种方法:DOM和SAX方式:两种方法在IDL自带的帮助里面有详细介绍,可以去查看. IDL 源码PRO sample_recurse, oNode, indent COM ...
- Activity not started, its current task has been brought to the front的解决办法
删除bin目录下所有文件,重新启动在试试
- wince天气代码
#ifndef COMMON_H #define COMMON_H #include <Windows.h> typedef struct _operateInfo { HANDLE hS ...
- RadioGroup+TabHost
=.= //MainActivity public class MainActivity extends TabActivity implements OnCheckedChangeListener ...
- [转]makefile文件的编写规则及实例
http://xueqi.iteye.com/blog/1567866 1.一个简单的makefile例子 假设一个程序有两个文件file1.c,file2.c,每个文件都包含head.h,生 ...