.NET转JAVA之路005
来源:互联网 发布:网络空间安全战略 编辑:程序博客网 时间:2024/06/02 06:32
约瑟夫环
约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后[1] 结果+1即为原问题的解。
这里我们简化模型,500个人小朋友围城一个圈,数三退出,求出最后一个人的下标是多少
思路一:构建一个500个bool数组,初始时全部为true,数到三时,赋值为false,
只要求出最后一个数组为true的下标数字,即为所求数字。
boolean[] arr=new boolean[500];//创建bool数组 for(int i=0;i<arr.length;i++){ arr[i]=true; //初始时都为true; } int leftcount=arr.length;//记录当前圈内还有多少人 int countNum=0;//1,2,3,1,2,3的记录值 int index=0; //当前的索引值,超出500返回0; while(leftcount>1){//只要圈内人还多于1个人,继续执行 if(arr[index]==true){ countNum++; if(countNum==3) { countNum=0; arr[index]=false; //出列 leftcount--; //圈内人数减1 } } index++; //索引自增长 if(index==arr.length){ index=0; //超出索引值,返回到头部 } } for(int i=0;i<arr.length;i++) { if(arr[i]==true) { System.out.println(i); //获得唯一的一个没有出列的数字 } }
思路二:小朋友手拉手(双向链表)
先上图:
//小朋友类class Kid{ int id; Kid left; Kid right;}class KidCircle{ int count=0; Kid first,last; KidCircle(int n){ for(int i=0;i<n;i++){ add(); } } void add(){ Kid k=new Kid(); k.id=count; if(count<=0) { first=k; last=k; k.left=k; k.right=k; }else{ last.right=k; k.left=last; k.right=first; first.left=k; last=k; } count++; } void delete(Kid k) { if(count<=0) { return ; }else if(count==1){ first=last=null; }else{ k.left.right=k.right; k.right.left=k.left; if(k==first){ first=k.right; } else if(k==last){ last=k.left; } } count--; }}
主程序
public static void main(String[] args) { KidCircle kc=new KidCircle(500); int countNum=0; Kid k=kc.first; while(kc.count>1) { countNum++; if(countNum==3) { countNum=0; kc.delete(k); } k=k.right; } System.out.println(kc.first.id); }
0 0
- .NET转JAVA之路005
- .NET转JAVA之路001
- .NET转JAVA之路002
- .NET转JAVA之路003
- .NET转JAVA之路004
- Stryon带.NET走上Java之路
- .net转java 之 MyBatis入门教程
- JAVA net之TCP
- .net 学习之路(转)
- .net与java之争
- Java与.NET之争
- Java和.Net 之战
- .Net调用Java的WebService之亲身体验 (转自梦幻Dot Net)
- .Net调用Java的WebService之亲身体验 (转自梦幻Dot Net)
- 开始.NET之路!
- .NET学习之路
- 迷茫.Net之路
- C#.NET之路
- Spring+SpringMVC+Mybatis框架搭建
- rectangle
- HTML学习记录之超链接和路径
- 滑动滚轮放大缩小
- 【seen看世界】:人们为什么会趋于稳定?
- .NET转JAVA之路005
- [LeetCode] Find the Difference
- 动画的简单使用
- 第43课:Spark 2.0编程实战之SparkSession、DataFrame、DataSet开发实战
- php错误级别
- machine people
- SqlServer索引的原理与应用
- 在 keil MDK_V5中加入arm7,arm9等一些芯片型号
- Vijos P1412 多人背包