约瑟夫问题
来源:互联网 发布:吉林省典恒网络怎么样 编辑:程序博客网 时间:2024/05/24 04:59
问题描述:n个人(编号0~(n-1)),从0开始报数,报到(m-1)的退出,剩下的人继续从0开始报数。求胜利者的编号。
public class Child {int no;Child nextChild = null;public Child(int no){this.no = no;}}
public class CycLink {Child firstChild = null;int len = 0;Child temp = null;int m = 0;//设置队列长度public void setLen(int len){this.len =len;}//设置第几个人出列public void setM(int m){this.m = m;}//创建队列,使用循环链表public void createCyc(){for(int i=1;i<=len;i++){Child ch = new Child(i);//第一个人为链表的第一个if(i==1){temp = firstChild = ch;}else{temp.nextChild = ch;temp = ch;//如果是最后一个人就链接到第一个人if(i==len){temp.nextChild = firstChild;}}}show();}public void play(){//定义两个指针,temp1用来找到第m个人的前一个人,temp2用来找到第m个人Child temp1 = firstChild;Child temp2 = null;for(int j=len;j>1;j--){//找到第m个人的前一个人for(int i=1;i<m-1;i++){temp1 = temp1.nextChild;}//把第m个人的前一个人链接到第m个人的后一个人temp2 = temp1.nextChild;temp1.nextChild = temp2.nextChild;temp1 = temp2.nextChild;}System.out.println("结果是:" + temp1.no);}public void show(){Child temp3 = this.firstChild;do{System.out.print(temp3.no + " ");temp3 = temp3.nextChild;} while(temp3 != this.firstChild);}}public class Josefu {public static void main(String[] args) {// TODO Auto-generated method stubCycLink cyc = new CycLink();cyc.setLen(10);cyc.createCyc();cyc.setM(4);cyc.play();}}
阅读全文
0 0
- 约瑟夫问题、约瑟夫环
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 免费批量修改图片MD5软件 图片处理防和谐软件
- C#中静态变量与非静态变量的区别
- Android Bitmap 知识点梳理
- Android 关闭多个视图的方法
- POJ 1163 The Triangle数塔 动态规划
- 约瑟夫问题
- 批量添加 或修改文件后缀名
- PAT考试重点真题选做
- C语言中的数据类型转化
- 开启VPN的一些问题解决方案
- 171208之Oracle总结(一)
- 669. Trim a Binary Search Tree
- BZOJ1125: [POI2008]Poc
- 15、ES6 数组的解构赋值