约瑟夫问题用Python编程解决, Python支持list, 解决这个非常方便:
下面代码是在Python3上调试通过的。
def getLastJoseph(n,m): """ 约瑟夫问题,n 总人数,m 从1报数,第m个杀掉。返回最后一个人序号。 """ aList = list(range(1,n+1)) #生成序号列表 i = 0 #当前报数的人的列表中位置 j = 1 #开始报数 while(1): if len(aList) == 1: #只剩一个,退出循环 break if i >= len(aList): #循环到第一个位置。 i = 0 if j == m: aList.remove(aList[i]) #报数m的出局 j = 1 #重新开始报数 continue j = j + 1 i = i + 1 return aList[0] #返回最后一个人的序号
def getLastJoseph2(n,m): x = 0 for i in range(2,n+1): x = (x + m) % i return (x + 1)