学习笔记 - 数据结构 :约瑟夫环问题(python)

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

if __name__ == "__main__":
    """
    当k是1的时候,存活的是最后一个人
    当k>=2的时候,构造一个n个元素的循环链表,然后依次杀掉第k个人,留下的最后一个是可以存活的人。

    1.用模运算模拟循环链表
    """

    n, k = 5, 3                         # 假设n=5,k=3

    # a = [x for x in range(1, n+1)]    # 生成数据
    a = list(range(1, n+1))

    step = k - 1
    del_index = 0 + step                # 默认从第一个人开始数,
    									# 第一个被杀的人的下标
    for i in range(n-1):
        del a[del_index]
        del_index = (del_index + step) % len(a)

    print(a[0])  						# 4

版权声明:本文为chen_holy原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。