张祎

导航

简洁之美 -约瑟夫环的python 解法

问题描述:

约瑟夫环问题:已知n个人(以编号1,2,3...n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到k的那个人出列;他的下一个人又从1开始报数,数到k的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。

print ("version: python3.4")
def josephus(n,k):
    index=0
    people=list(xrange(1,n+1))
    while True:
        if len(people)==1:
            break
        index=(index+(k-1))%len(people)
        print('kill:',people[index])
        del people[index]
    print('survive:',people[0])
if __name__=='__main__':
    josephus(8,3)

解析一下: 主要用到python中列表(lsit)下标访问特性。之前构思用C++ 实现的时候,需要自己构建双向链表,才能实现。

百度时,发现一个更全的连接。

http://baike.baidu.com/link?url=jGCdWXzolqUD64rlcOTZ9Q4wuo_gl52RKKrAii6hMklSnQ1Us-5wT1mMJrE_YRDRDwgeCMNui0R5KasGhsEHDq#2_8

posted on 2015-10-07 17:19  张祎  阅读(1216)  评论(0编辑  收藏  举报