约瑟夫环递归求解
来源:互联网 发布:多商网淘宝代销赚钱吗 编辑:程序博客网 时间:2024/05/22 07:45
约瑟夫环递归求解
题目
约瑟夫环是一个数学的应用问题:已知m个人(以编号1,2,3...m分别表示)围坐在一张圆桌周围。从编号1开始报数,每次报到k的那个人出列,然后下一个人再从1开始报数。求解:最后一个出列的人的编号。
解题思路
使用递归
假设有10个人,编号为1、2、3、4、5、6、7、8、9、10,k=3。从1开始报数,则第一次出列的人的编号为3。从下一个人又从1开始报数。则第一个人出列之后的序列为:
4 5 6 7 8 9 10 1 2 (*)
对应的顺序序列为:1 2 3 4 5 6 7 8 9 (**)
可以发现:[(*)+k]%m = (),也就是说,m个人围成的环第i次出来的人的编号是m-1个人第i-1次出来的人的编号+k,然后模m。
设第i次出列的人的编号为f(m,k,i),则:
当i=1时,f(m,k,i)=(m+k)%m
当i!=1时,f(m,k,i) = [f(m-1,k,i-1)+k]%m
编程实现
private static int Joseph(int m, int k, int i) { if (i == 1) return (m + k-1) % m; else return (Joseph(m - 1, k, i - 1) + k) % m; } static void Main(string[] args) { Console.WriteLine("请输入m,k"); int m = int.Parse(Console.ReadLine()); int k = int.Parse(Console.ReadLine()); for (int i = 1; i <= 10; i++) { Console.WriteLine( Joseph(m,k,i)+1); } Console.Read(); }
0 0
- 约瑟夫环递归求解
- 约瑟夫问题递归求解
- 约瑟夫环问题的两种解决方式(递归求解和数组模拟求解)
- 求解约瑟夫环问题
- 约瑟夫环求解
- JAVA求解约瑟夫环
- 约瑟夫环问题求解
- 约瑟夫环---数学公式求解
- 约瑟夫环数学公式求解
- 约瑟夫环求解O(n)
- C++单链表求解约瑟夫环
- 约瑟夫环:递归算法
- 约瑟夫环:递归算法
- 约瑟夫环-递归算法
- 约瑟夫环-PHP递归
- 约瑟夫环:递归算法
- 约瑟夫环递归写法
- 约瑟夫问题 The Josephus Problem 非递归算法求解
- 一、WIN7下EasyUI环境IIS配置支持.json格式的文件
- RecyclerView的点击事件
- java 发展简史
- Java各种字符串连接方法性能比较
- LightOJ - 1119 Pimp My Ride(状态压缩)
- 约瑟夫环递归求解
- hdu 1049 Climbing Worm
- 常用设计模式之装饰模式
- cvStereoRectify 报错
- 面试总结+网上查阅的智力题
- win10(企业英文版)有关中文乱码 与 系统默认语言转换
- codevs2597团伙
- linux多线程编程--信号量和条件变量 唤醒丢失事件
- LightOJ - 1110 An Easy LCS(LCS)