黑马程序员——约瑟夫环问题

原创 2012年03月21日 16:14:29
---------------------- android培训java培训、期待与您交流! ----------------------/**
*李见黎
*2012-3-14
*约瑟夫环问题
*/


public class  Josephu
{
public static void main(String[] args) 
{
CycLink cl=new CycLink();
cl.setLen(5);
cl.CreateCyc();
cl.Show();
cl.setK(2);
cl.setM(2);
cl.Play();
}
}
/**
 * 循环列表类
 * @author 李见黎
 *
 */
 class CycLink
{
int Len;
Child firstChild=null; //初始化第一个元素对象,第一个指针不变
Child temp=null;     //定义一个游标,非常有用

int k=0;
public void setK(int k)
{
this.k=k;
}

int m=0;
public void setM(int m)
{
this.m=m;
}
public void setLen(int len)
{
this.Len=len;
}
/**
* 创建循环链表
*/
public void CreateCyc()
{
for(int i=1;i<=this.Len;i++)
{
if(i==1)
{//是第一个元素,将第一个对象的引用付给firstChild和temp
Child ch=new Child(i);
this.firstChild=ch;
this.temp=ch;

}
else
{
if(i==Len)
{//是最后一个元素
Child ch=new Child(i);
temp.nextChild=ch;
temp=ch;
temp.nextChild=this.firstChild;
}
else
{
Child ch=new Child(i);
temp.nextChild=ch; //游标指向下个
temp=ch; //游标移动
}
}
}
}
/**
* 执行约瑟夫算法
*/
public void Play()
{
Child temp=this.firstChild;
//1.找到开始元素K
for(int i=1;i<k;i++)
{//都是从1开始的
temp=temp.nextChild;
}
//2.数M个元素

while(Len!=1)
{
for(int j=1;j<m;j++)
{
temp=temp.nextChild;
}
//找到要出圈的前一个元素
Child temp2=temp;

while(temp2.nextChild!=temp)
{
temp2=temp2.nextChild;
}

//2.第M个元素出圈
temp2.nextChild=temp.nextChild;
temp=temp.nextChild;

this.Len--;
}
//最后一个元素
System.out.println("最后一个出圈的是:"+temp.num);

}
/**
* 显示函数
*/
public void Show()
{
Child temp=this.firstChild; //定义一个游标,可以使firstChild不改变,之改变游标就可以


do
{
System.out.println(temp.num);
temp=temp.nextChild; //移动tempt
}
while (temp!=this.firstChild);
}


}
/**
 * 元素类,属性有,序列号,指向下一个的引用
 * @author 李见黎
 */
 class Child
{
int num;
Child nextChild=null;  //非常重要,很难想到,创建指向下一个的指针


public Child(int num)
{
this.num=num;
}
}--------------------- android培训java培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net/heima
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

黑马程序员-C语言-约瑟夫环

/* 10、 耶稣有15个门徒,其中有一个就是出卖耶稣的叛徒,请用排除法找出这位叛徒:15人围坐一圈,从第一个开始报号:1,2,3,1,2,3……,凡是报到“3”就退出圈子,最后留在圈内的人就...

《程序员面试代码指南》之约瑟夫环问题

题目:给定一个链表,一个整数m,从表头开始报数,每次报到m就该节点从链表中去掉。 输出最后剩下的节点。普通做法,就是遍历,当计数到m时把该节点删去,然后继续维持环状。时间复杂度O(m*n)在上面的算...

程序员面试系列——约瑟夫环

约瑟夫斯问题(Josephus Problem)约瑟夫斯问题(有时也称为约瑟夫斯置换),是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为“约瑟夫环”,也有的地方叫做“丢手绢”...

约瑟夫环问题——Josephus Problem

Joseph ring - known to n - (numbered 1, 2, 3... n, respectively) sitting around a round table. Numbe...

约瑟夫环问题(顺序表)——C++实现

#include #include #define MAXSIZE 100//人数上限 using namespace std; typedef int DataType; typedef stru...

解题笔记(10)——约瑟夫环问题

问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。           思路:容易想到的就是用环链表来做,构建一个环链表,每个结点的...

约瑟夫环问题(Josephus) —— 循环单链表

约瑟夫环问题 —— 循环单链表

剑指offer——约瑟夫环问题

题目描述:每年六一儿童节,NowCoder都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为NowCoder的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成...

数据结构——练习之约瑟夫环问题

数据结构——练习之约瑟夫环问题        约瑟夫环是一个数学的应用问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人...

约瑟夫环问题——(Hdu-5643,King's Game)

约瑟夫环问题解释: 当剩下n个人的时候,他们的编号设为为0、1、2、3、4.....n-1。假定最后编号为dp[n]的人会留下来 因为数到m的人会出列,那么在当前回合编号为 (m-1)%n 的人会...
  • FeBr2
  • FeBr2
  • 2016-03-27 16:28
  • 363
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)