我想知道是否有可能使用python中的列表解决Josepheus问题。“约瑟夫问题”在Python中使用列表
简而言之,约瑟夫斯问题就是要找到一个循环排列中的位置,如果使用事先已知的跳跃参数处理执行,这将是安全的。
例如:给定一个圆形排列,如[1,2,3,4,5,6,7]
和跳过参数3,人们将按照3,6,2,7,5,1
的顺序执行并且位置4
将是安全的。
我一直试图解决这个使用列表一段时间了,但索引位置变得棘手,我要处理。
a=[x for x in range(1,11)]
skip=2
step=2
while (len(a)!=1):
value=a[step-1]
a.remove(value)
n=len(a)
step=step+skip
large=max(a)
if step>=n:
diff=abs(large-value)
step=diff%skip
print a
更新与代码段的问题,但我不认为我的逻辑是正确的。
这种算法是惊人的!你能分享一下,你是怎么想到'idx =(idx + skip)%len(ls)'的?我知道它是有效的,但我不知道人们如何能够找到这种方式。谢谢! –
@JayWong这是最好的方式来通过一个数组,并从头到尾打包 –