天天看點

2行代碼解決約瑟夫環的問題——python

 用進制的思想來做,結合遞歸

# -*- coding: utf-8 -*-
"""
約瑟夫環的最簡單做法
例題:問一個監獄有100名犯人準備槍斃, 槍斃之前讓他們報數, 如果報的單數, 就槍斃, 如果是雙數, 就留下,
剩下的人繼續依次進行下一輪報數, 直到剩下最後一人就釋放, 問如果想活命, 一開始應該站哪個位置
@author: xiaozuo
"""

def getIndex(divide, scale, max_num):
    '''

    :param divide:  他是起始被計算的數, 之後的每次都不同, 第一次它應該是1
    :param scale:  進制數, 按該數進行區分
    :param max_num: 給出的最大數, 需要計算的範圍
    :return:  在max_num中存的最大進制數
    '''
    divide *= scale
    return divide if divide * scale >= max_num else getIndex(divide, scale, max_num)
print(getIndex(1,2,100))