韩顺平老师的JAVA教学视频:解决约瑟夫问题
2010-06-03 14:15
627 查看
感觉挺好的,就贴出来给大家看看吧
关于约瑟夫问题:
这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15
个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人
就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。
关于约瑟夫问题:
这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15
个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人
就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒。
public class yuesefu { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("约瑟夫问题"); CycLink cyclink=new CycLink(); cyclink.setLen(9); cyclink.createLink(); cyclink.setK(5); cyclink.setM(3); cyclink.show(); cyclink.play(); } } class Child{ int no; Child nextChild=null; public Child(int index) { //定一个编号 this.no=index; } } class CycLink{ Child firstChild=null;//指向第一个人 Child temp=null;//跑龙套 int len=0;//表示多少个人 int k=0;//从第几个人开始数数 int m=0;//数几下 //设置链表大小 public void setLen(int len) { this.len=len; } 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++) { if(i==1) { //创建第一个人 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 show(){ Child temp=this.firstChild;//跑龙套 System.out.print("人数编号:"); do{ System.out.print(" "+temp.no); temp=temp.nextChild; }while(temp!=this.firstChild); System.out.println(); } //开始play public void play() { Child temp=this.firstChild; //1.找到开始数数的人 for(int i=1;i<k;i++) { temp=temp.nextChild; } System.out.print("从第"+this.k+"个人开始,数"+this.m+"的人依次是:"); while(this.len!=1) { //2.数m下 for(int j=1;j<m;j++) { temp=temp.nextChild; } //3.将数到m的人删除链表 Child temp2=temp; System.out.print(" "+temp2.no); //数到m的人继续往下走,走到数到m-1的那个人,将m-1的下一跳指向m的下一跳 while(temp2.nextChild!=temp) { temp2=temp2.nextChild; } //将m-1的下一跳指向m的下一跳,即删除数到m的人 temp2.nextChild=temp.nextChild; temp=temp.nextChild; this.len--; } System.out.println(); System.out.println("剩下的是:"+temp.no); } }
相关文章推荐
- 约瑟夫问题(Josephus)java链表解决
- Java解决约瑟夫问题代码实例
- 清华大学韩顺平讲师讲算法之二(上),用环链表来解决约瑟夫问题
- java数组解决约瑟夫(Josephus)问题
- java 数组 解决 约瑟夫问题 算法
- 约瑟夫问题Java解决
- 用java解决约瑟夫问题
- java 记事本读取文本文件的乱码问题,终于解决了 O(∩_∩)O~ 多谢 uu老师帮助
- java 记事本读取文本文件的乱码问题,终于解决了 O(∩_∩)O~ 多谢 uu老师帮助
- 约瑟夫问题 java解法(双向链表解决)
- java韩顺平老师视频有需要可以留言
- 韩顺平_PHP程序员玩转算法公开课(第一季)05_使用单链表解决约瑟夫问题_学习笔记_源代码图解_PPT文档整理
- 解决H5播放视频黑屏只有声音没有图像的问题,Java调用ffmpeg转码成h264的mp4格式
- 【备忘】Java教学系列视频教程 孔浩老师 千课巨献全网最全 共26G
- 【备忘】Java教学系列视频教程 孔浩老师 千课巨献全网最全 共26G
- Java 中文问题的解决 mysql, oracle, servlet, jsp
- java项目内存溢出问题解决方法
- java乱码问题解决
- java eclipse不更新class的一个小问题与解决
- 一种快速解决JAVA内存泄漏问题的方法