约瑟夫环问题 - 哪些人下船
有一条船,船上有30个人,船只能坐16个,要下14个,起码循环14次,对30 个人进行编号,从1开始,每数到第七个就下船,最后输出哪些人下船。
# 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
方法一:
设置一个变量 out 作为要下船人的下标
从下标为0数到下标为6,即第7个人,将它删除,输出作为下船的人,所以第一个下船的人下标就为6,此时删除后的下标后一位向前面补齐,即 ‘7’删除后,8的下标就变成了6,所以后面删除的人只需要再加6,就能删除 ‘14’。以此类推。
merberlist = list(range(1, 31))
out = 6
while len(merberlist) > 16:
if out < len(merberlist):
print("下船的人:", merberlist.pop(out))
out += 6
else:
out = out - len(merberlist)
print("下船的人:", merberlist.pop(out))
out += 6
下船的人: 7
下船的人: 14
下船的人: 21
下船的人: 28
下船的人: 5
下船的人: 13
下船的人: 22
下船的人: 30
下船的人: 9
下船的人: 18
下船的人: 27
下船的人: 8
下船的人: 19
下船的人: 1
Process finished with exit code 0
方法二:
删除列表第一个元素,然后在列表的末尾再将它添加进来,直到第七个人,就只将其删除,不再添加,输出来作为要下船的人。
merberlist = list(range(1, 31))
i = 0
while len(merberlist) > 16:
if i < 6:
merberlist.append((merberlist.pop(0)))
i += 1
else:
print("要下船的人:", merberlist.pop(0))
i = 0
E:\python\python3.9.1\python.exe E:/tlbb/约瑟夫环问题/谁下船.py
要下船的人: 7
要下船的人: 14
要下船的人: 21
要下船的人: 28
要下船的人: 5
要下船的人: 13
要下船的人: 22
要下船的人: 30
要下船的人: 9
要下船的人: 18
要下船的人: 27
要下船的人: 8
要下船的人: 19
要下船的人: 1
分类:
python笔记
, python每日一题
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通