Pythonのリストを使ってJosepheusの問題を解決できるかどうかを知りたかったのですが、"Josephus-problem" 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配列を通過して最後から最後までラップするのに最適な方法です。 –