码迷,mamicode.com
首页 > 其他好文 > 详细

约瑟夫环的递推方法

时间:2016-12-14 01:15:56      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:知乎   tps   class   editable   tab   question   com   clear   链接   

可以这样理解这个方法:
当有n个人的时候,他们的编号依次是0、1、2、3、4、………、n-1。假设最后编号为x(n)的人会留下来。
因为数到m的那个人会出列,那么此轮中编号为(m-1)%n的人会出列,编号为(m+0)%n的人将做为下一轮编号为0的人,此轮编号为(m+i)%n的人将做为下一轮编号为i的人…
因此当有n-1个人的时候,编号为i的人对应着上一轮编号为(m+i)%n的人。假设此轮编号为x(n-1)的人最终会留下来。因为编号为x(n-1)的人肯定对应着上一轮的x(n),所以有x(n)=(m+x(n-1))%n
有了这个递推公式,那我们就可以一直递推到x(2)=(m+x(1))%2,而x(1)=0。
所以我们可以这么来写这个函数:
j = 0
for i 从 2 到 n:
j = (m+j)%i
最终第j个人会留下来(如果从1开始编号就是第j+1个人最终会留下来)。

链接:https://www.zhihu.com/question/20065611/answer/78681758
来源:知乎

约瑟夫环的递推方法

标签:知乎   tps   class   editable   tab   question   com   clear   链接   

原文地址:http://www.cnblogs.com/zzuli2sjy/p/6172225.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!