python 求解约瑟夫问题

python 求解约瑟夫问题

 on_boat = [i+1 for i in range(30)]
    off_boat = []
    while len(off_boat)<=15:
        for i in range(30):
            if ((i+1)%9 ==0) and (on_boat[i] not in off_boat):
                off_boat.append(on_boat[i])

    print(off_boat)
————————————————
版权声明:本文为CSDN博主「yplnjtc」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/yplnjtc/article/details/130001886

代码有问题,while那里会进入死循环,这里的while没有意义啊,下面的for执行完毕后,while不管循环多少次,结果都不会再变化了,所以删除掉while循环即可。

如果我的回答对您有帮助,请点赞并采纳我的答案,谢谢

约瑟夫问题(Josephus problem)是一个经典的数学问题,描述如下:假设有n个人围成一圈,从某个人开始依次报数,报到m的人出圈,下一个人再从1开始报数,如此循环,直到只剩下最后一个人。问题是,最后剩下的这个人是原始序列中的第几个人?

以下是使用Python解决约瑟夫问题的一个代码实现:

def josephus(n, m):
    # 创建一个列表,表示初始序列
    people = list(range(1, n + 1))
    # 初始化索引和剩余人数
    index = 0
    remaining = n
    # 开始循环,直到只剩下一个人
    while remaining > 1:
        # 计算下一个出圈的人的索引
        index = (index + m - 1) % remaining
        # 移除出圈的人
        people.pop(index)
        # 更新剩余人数
        remaining -= 1
    # 返回最后剩下的人
    return people[0]

# 示例用法:
n = 10  # 总人数
m = 3   # 报数到m的人出圈
result = josephus(n, m)
print(f"最后剩下的人是第 {result} 个人")

以上代码通过模拟每一轮的出圈操作,实现了求解约瑟夫问题。请注意,这只是一种可能的解法,不同的解法可能会有不同的实现方式。

不知道你这个问题是否已经解决, 如果还没有解决的话:


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^