第18题:类似约瑟夫问题
来源:互联网 发布:oop面向对象 js 编辑:程序博客网 时间:2024/06/04 19:49
欢迎转载,转载请务必注明出处:http://blog.csdn.net/alading2009/article/details/45340319
GitHub地址:https://github.com/frank-cq/MyTest
第18题(数组):n个数字(0,1,…,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字(第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后,从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。
看到该题,第一个想到的是使用循环链表模拟删除数字的过程,但是题目规定使用数组,于是。。。看了答案,此题类似约瑟夫问题,而约瑟夫问题在《具体数学》第一章中有讲解。,这是WiKi上的约瑟夫问题解释。July大神的答案解法基于递推公式:
f(n,m)=[f(n−1,m)+m]%n ,使用循环求解结果(如果使用递归会更容易与公式联系起来)。
代码
package test018;/** * Created by cq on 2015/4/27. * 第18题:n个数字(0,1,...,n-1)形成一个圆圈,从数字0开始,每次从这个圆圈中删除第m个数字 * (第一个为当前数字本身,第二个为当前数字的下一个数字)。当一个数字删除后, * 从被删除数字的下一个继续删除第m个数字。求出在这个圆圈中剩下的最后一个数字。 */public class Test018 { public static int deleteMthNum(int[] arr, int m){ if (arr == null){ return -1; } int fnIndex = 0; for (int i = 2; i <= arr.length; i++){ fnIndex = (fnIndex+m)%i; } return arr[fnIndex]; } public static void main(String[] args){ int[] arr = {1,2,3,4,5,6,7}; System.out.println(deleteMthNum(arr,2)); System.out.println(deleteMthNum(arr,3)); System.out.println(deleteMthNum(arr,4)); }}
执行结果
Connected to the target VM, address: '127.0.0.1:13865', transport: 'socket'742Disconnected from the target VM, address: '127.0.0.1:13865', transport: 'socket'Process finished with exit code 0
数学解题确实相当的优雅,后面有时间再好好看看《具体数学》上的约瑟夫问题。
0 0
- 第18题:类似约瑟夫问题
- 第6题 约瑟夫环问题
- java中遇到的类似约瑟夫问题
- 第三章第32题约瑟夫环问题
- 18、约瑟夫环问题
- 类似约瑟夫环
- July 微软面试100题 第18题 约瑟夫环
- 约瑟夫问题、约瑟夫环
- 第一题:约瑟夫环问题
- 【100题】约瑟夫环问题。。
- 循环链表实现Joseph环(约瑟夫环)猴子选大王类似问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- 约瑟夫问题
- wpf下实现图片的放大缩小和平移
- Android 深入理解Android中的自定义属性
- 2015 编程之美 八卦的小冰
- PageOffice的一些其他功能
- Could not locate executable null\bin\winutils.exe in the Hadoop binaries
- 第18题:类似约瑟夫问题
- 在win7 X64上配置Unix V6++
- php关于定义方法的一种思路
- 解决Maven中OutOfMemory错误
- linux mount 详解
- 黑马程序员----交通灯管理系统
- 数据结构串的实现以及KMP改进算法
- cheat
- 广东有线U宽频的一些东西