我想为一般约瑟夫斯问题找到最简单的算法,即任何方向的计数。
以组合的“递归列表”算法为基础(Python)。
它适用于积极的转变,并以消极的方式开始,但随后出现问题。
def add(x):
if x >= 0:
return 1
return -1
def josephus(arr, start, shift):
if len(arr) == 1:
return arr
else:
start = (start + shift - add(shift)) % len(arr)
arr.pop(start)
print(arr)
return josephus(arr, start, shift)
size = int(input())
people = list(range(1, size + 1))
start = int(input()) - 1
shift = int(input())
print(people)
josephus(people, start, shift)
添加几个“if”语句可能会有所帮助,但我不想这样做。