擅长:python、mysql、java
<p>这个问题相当于众所周知的<a href="https://en.wikipedia.org/wiki/Josephus_problem" rel="nofollow noreferrer">Josephus problem</a>,其中<code>n</code>囚犯站成一个圆圈,他们按顺序被杀害,每一次,下一个被杀害的人从上一个人绕圆圈走<code>k</code>步;台阶只算在剩下的囚犯身上。Python中的一个示例解决方案可以在<a href="http://rosettacode.org/wiki/Josephus_problem#Python" rel="nofollow noreferrer">Rosetta code website</a>上找到,我在下面稍微调整了一下:</p>
<pre class="lang-py prettyprint-override"><code>def josephus(n, k):
p = list(range(1, n+1))
i = 0
seq = []
while p:
i = (i+k-1) % len(p)
seq.append(p.pop(i))
return seq
</code></pre>
<p>例如:</p>
<pre class="lang-py prettyprint-override"><code>>>> josephus(13, 5)
[5, 10, 2, 8, 1, 9, 4, 13, 12, 3, 7, 11, 6]
</code></pre>