约瑟夫环问题,约瑟夫环,有 个囚犯站成一个 圆


n 个囚犯站成一个 圆圈,准备处决。首先从一个人开始,越过 k-2 个人(因为第一个人已经被越过),并杀掉第 k 个人。接着,再越过 k-1 个人,并杀掉第 k 个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。

def J(n,x):    li=range(1,n+1)    while li:        print '\\t'.join('1' if i in li else '0' for i in range(1,n+1))        li=li[x-1:]+li[:x-1]        li=li[1:]J(10, 3)#output:#1  1   1   1   1   1   1   1   1   1#1  1   0   1   1   1   1   1   1   1#1  1   0   1   1   0   1   1   1   1#1  1   0   1   1   0   1   1   0   1#1  0   0   1   1   0   1   1   0   1#1  0   0   1   1   0   0   1   0   1#0  0   0   1   1   0   0   1   0   1#0  0   0   1   1   0   0   0   0   1#0  0   0   1   0   0   0   0   0   1#0  0   0   1   0   0   0   0   0   0#修正后def J(n,x):    li=range(1,n+1)    while li:        print '\\t'.join('1' if i in li else '0' for i in range(1,n+1))        li=(lambda t: li[t:]+li[:t])( (x-1)%len(li) )[1:]J(10, 5)#Out:#1  1   1   1   1   1   1   1   1   1#1  1   1   1   0   1   1   1   1   1#1  1   1   1   0   1   1   1   1   0#1  1   1   1   0   0   1   1   1   0#1  0   1   1   0   0   1   1   1   0#1  0   1   1   0   0   1   1   0   0#1  0   1   1   0   0   1   0   0   0#0  0   1   1   0   0   1   0   0   0#0  0   1   0   0   0   1   0   0   0#0  0   1   0   0   0   0   0   0   0#该片段来自于http://byrx.net

评论关闭