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} 个人")
以上代码通过模拟每一轮的出圈操作,实现了求解约瑟夫问题。请注意,这只是一种可能的解法,不同的解法可能会有不同的实现方式。
不知道你这个问题是否已经解决, 如果还没有解决的话: