正文

约瑟夫问题(另类)2007-12-16 21:02:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/mozo/31463.html

分享到:

约瑟夫问题
这是17世纪的法国数学家加斯帕在《数目的游戏问题》中讲的一个故事:15个教徒和15 个非教徒在深海上遇险,必须将一半的人投入海中,其余的人才能幸免于难,于是想了一个办法:30个人围成一圆圈,从第一个人开始依次报数,每数到第九个人就将他扔入大海,如此循环进行直到仅余15个人为止。问怎样排法,才能使每次投入大海的都是非教徒.

约瑟夫问题  
    这是一个非常经典的问题:n个骑士编号1,2,...,n,围坐在圆桌旁,编号为k的骑士从1开始报数,报到m的骑士出列,然后下一个位置再从1开始报数,找出最后留在圆桌旁的骑士编号。

 
强强估计是为了活跃一下QB版块,发了这么一个贴:
http://www.programfan.com/club/post-254722.html
题目:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

我也就改善了一下别人的代码,最后实在忍不住看看是不是可以另辟蹊径,
结果,我还真的写出来了,完全是自己的经验之作.绝无抄袭.
也算是一个小小的成就,值得自我再次陶醉一下.
但具体理论原理,我还真的说不出来,完全是形而上学而成的.
持怀疑态度的尽管一试,我是再没有精力去研究其中的道理了,
有兴趣的有慧眼的,还请指点一二:

QB,VB代码:
Function m3(n, m)
a = 1
s = 1
m1 = m - 1
Do While a < n
    b = a - s
    If b < m1 Then
        a = a + 1
        s = m1 - b
        If s > a Then
           s = s Mod a
           If s = 0 Then s = a
        End If
    Else
        b = (a - s) \ m1
        a = a + b
        s = s + m * b
    End If
Loop
m3 = s - m * (a - n)
End Function

阅读(3008) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册