丢手绢问题(约瑟夫问题)的python实现
约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。
1 def fnA(p, personNum, cnt): 2 times = cnt // personNum + 1 3 temp = []; 4 5 for t in range(times): 6 temp = temp + p 7 8 p2 = p[:] 9 p2.remove(temp[cnt-1]) 10 return p2 11 12 13 def fnB(p, cnt): 14 pa = p[:cnt-1] 15 pb = p[cnt:] 16 p = pb + pa 17 return p 18 19 20 cnt = 8 #M 21 personNum = 12 #N 22 23 persons = ["p"+ str(x) for x in range(1, personNum+1)] 24 print(persons) 25 26 personNum = len(persons) 27 if cnt < personNum: 28 while True: 29 persons = fnB(persons, cnt) 30 print(persons) 31 if len(persons) <= cnt: 32 break 33 34 35 personNum = len(persons) 36 while True: 37 persons = fnA(persons, personNum, cnt) 38 print(persons) 39 if len(persons) == 1: 40 break 41 else: 42 personNum = personNum - 1;
改变M和N的值,将会得到不同的值,如下运行效果
如约瑟夫问题,社会永不停息地淘汰着一批批人,那谁又将是最后的幸运者呢。。。
我也不知道,天气好冷,我脚都冻僵了,该睡觉了,晚安!
分类:
Python
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?