约瑟夫问题是个有名的问题:N个人围成一圈,从第一个开始报数,第M个将被杀掉,最后剩下一个,其余人都将被杀掉。
代码:
// s是Python中下标值,可更改为从第s个下标值报数
// n为总人数,counts为指定报数字值
def Josephus(s, n, counts):
count = 0; ind = s-1;
arr = list(range(1,n+1)); ls = list()
while any(arr):
count+=1;ind+=1
if count == counts: count = 0; ls.append(arr.pop(ind)); ind-=1
if ind == len(arr)-1:
ind = -1;
if count == counts:count = 0; ls.append(arr.pop(ind))
return ls
测试结果:
print(Josephus(s=0, n=8, counts=4))
// 输出为第i个人,1<=i<=n
[4, 8, 5, 2, 1, 3, 7, 6]