python类约瑟夫环原创问题求解 求大神

60个人从1开始编号每人拿一个号码牌排成圈,从 1开始报数,
第一次报数到2的人出列,然后从出列者的下一个人重新报数
第二次报数到3的人出列,然后从出列者的下一个人重新报数
第三次报数到4的人出列,然后从出列者的下一个人重新报数
….以此类推,直到所有人都出列,编程实现输出出列号码序列

# totalNum:猴子总数
# startNum:开始序号
# intervalNum:间隔数

def KingElect(totalNum, startNum, intervalNum):
    monkeyList = []
    out_order = 0  # å‡ºåˆ—排序
    current_index = 0  # å½“前列表下标
    if (totalNum < intervalNum):
        return
    monkeyId = startNum  # çŒ´å­åˆå§‹æŽ’列
    for i in range(1, totalNum + 1):
        if monkeyId == totalNum + 1:
            monkeyId = 1
        monkeyList.append(monkeyId)
        monkeyId += 1
    # print(monkeyList, end='')

    while (len(monkeyList) > 1):
        out_order += 1
        current_index += 1
        if (current_index > len(monkeyList)):
            current_index = 1
        if (out_order == intervalNum):
            intervalNum += 1
            out_order = 0
            print('--', monkeyList[current_index - 1], 'Out')
            monkeyList.pop(current_index - 1)
            print( end='')
            current_index -= 1
    print('--', monkeyList[0], 'Gain the elect')


if __name__ == '__main__':
    KingElect(60, 1, 2)
温馨提示:答案为网友推荐,仅供参考