Arn*_*904 4 python loops python-2.7
我一直试图编写约瑟夫斯问题,由于某种原因它只在某些情况下工作,我不确定为什么.TL; DR如何工作是这样的:
你有一群X人.每个第N个人都将被杀死,直到只剩下一个最后一个人.所以说例如你有10个[AKA:X]人,你决定杀死每个第3 [AKA:Nth]人,它看起来像这样:
第一轮:1,2,(3个模具),4,5,(6个模具),7,8,(9个模具),10
第二轮:1,(2因为是连续的圆而死),3,5,(7个死),8,10
第三轮:(1),4,5,(8),10
第四轮:4,(5),10
第五轮:4,(10)
而我们最终只剩下4号人作为唯一的幸存者.
我的程序完全没问题.但是,当我输入X as 55和N时,17我得到的人的错误答案27应该是人40.任何人都可以告诉我我的循环搞砸了吗?
源代码:
def solveJosephus(specifics):
people = [int(x) for x in range(1,int(specifics[0])+1)]
killPosition = int(specifics[1])
positionCounter = 0
sorted = False
while not sorted:
if len(people) == 1:
print(people[0]) # Pyschologically scarred Winner!
sorted = True
for person in people:
positionCounter += 1
if positionCounter == killPosition:
print(person)
people.remove(person)
positionCounter = 1
solveJosephus(raw_input().split())
Run Code Online (Sandbox Code Playgroud)
问题是你在迭代它时从列表中删除人员.
会发生什么是以下情况:
说你有X = 5和N = 2.你的清单是[1,2,3,4,5].你到了index = 1,2人死了.现在你的清单是[1,3,4,5].问题是你的索引仍然是等于1但现在指向人3.当你再去两个地方(索引= 3),而不是杀死人4,你杀了人5.