约瑟夫环(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个人 ...
随机推荐
- ListView控件的Insert、Edit和Delete功能(第一部分)
摘自:http://blog.ashchan.com/archive/2007/08/28/listview-control-insert-edit-amp-delete-part-1aspx/ Li ...
- sql server多行数据(一列)转换成一个字段
create table #test ( id int not null, memeo int not null ) ,) ,) ,) )) ,,'') drop table #test 总结: 格式 ...
- CodeForces 709B Checkpoints 模拟
题目大意:给出n个点的坐标,和你当前的坐标,求走过n-1个点的最短路程. 题目思路:走过n-1个点,为了使路程更短,那么不走的点只可能第一个点或最后一个点.模拟就行了,比较恶心. #include&l ...
- php杂乱
// // if ( $_GET['action'] == 'search' ) {// $_clean = array();// $_clean['stype ...
- php 版本比较
判断当前运行的 PHP 版本是否高于或等于你提供的版本号. function is_php($version) { static $_is_php; $version = (string) $vers ...
- 第一章C语言简介及输出函数 上机部分
第一章C语言简介及输出函数 上机1 #include "stdio.h" void main() { printf("南方学院,你好!\n"); printf( ...
- [转]ubuntu的which、whereis、locate和find命令
which 只能寻找执行文件 ,并在PATH变量里面寻找. whereis 从linux文件数据库(/var/lib/slocate/slocate.db)寻找,所以有可能找到刚刚删除,或者没有发现 ...
- Dev之ChartControl控件(二)— 绘制多重坐标图形
有时针对一个ChartControl控件可能要设置多个Y轴,进行显示: 以下举个例子:如在一个Chart中显示多个指标项如图: 首先,读取数据,并对左边的Y轴最大和最小值进行设定 IndexSerie ...
- dfs和bfs的简单总结
首先是dfs,又名深度优先搜索.看名字就知道,它的核心思想就是一直搜索,先在一条路上面一路撸到底,如果到底没有办法前进了,那么判断是否到达终点,如果没有到达,那么就回溯到之前的点再撸. dfs的要点: ...
- hdu_2222_Keywords Search(AC自动机板子)
题目连接:hdu_2222_Keywords Search 存个自己写的AC自动机 #include<cstdio> #include<cstring> #define F(i ...