2008-03-26 Ruby 测试题(00007)

2008-03-26 Ruby 测试题(00007)

今天的题目是约瑟夫环。
简单介绍一下,N个人排成一圈,编号为1~n。
从1号开始报数,当报到M时,该位置的人出局,余下的人依然是一个圈,从下一个人开始报数(从1开始),再到第M个出局。
有三种求解的要求:
1、求出N个人报到M出局的情况下,哪个初始位置是最后一个出局的人;
2、求出N个人报到M出局的情况下,所有人出局的先后顺序;
3、如果N个人年龄各不相同(可以用一,二,三,四。。。来代替),在报到M出局的情况下,怎样的原始序列(即谁在1号位,谁在2号位。。。)可以保证出局者按年龄大小递增。

约瑟夫环一般如果能写正确,效率就不会有太大的问题。今天的目的是写出短小精悍的程序来。
不是很懂怎么把答案表达清楚。所以就写了一个函数~ 很土很local,不过努力了。
本帖隐藏的内容需要回复才可以浏览
对算法很不熟悉,看看先。
比短吗?那就空间换效率了

本帖隐藏的内容需要回复才可以浏览
rest *= n * m 是什么意思?
将 rest 这个数组重复 (n * m )次,这样就把环变成了串~
本帖隐藏的内容需要回复才可以浏览
楼上试一下joseph(6,3)
超过600分钟还不能编辑了.......
jmouse能不能给分析一下应该怎么改?


[Copy to clipboard] [ - ]