讨论/题目交流/除掉坏人(请大家给个思路)/
除掉坏人(请大家给个思路)

国王抓了n个坏人,想除掉这批坏人,又不想落下暴君的名声,就想了一个办法

又找来n个好人,让这些人站成一圈,前n个是好人,后n个是坏人

国王出了一个数m,每次数到m的人就被处死,如果数到队尾,则继续从第一个人数,直到剩余n个人

想让你来帮国王出这一个数字,怎么才能只除掉坏人呢?

示例:

输入 1

输出 2

解释:每次数到2的人被杀掉,则第一次就把坏人杀掉,剩下一个好人
示例2:

输入  3

输出  5

解释,当m=5 时,则前3次依次处理 5,4,6 号,剩下三个好人
示例3:

输入 8

输出 7632

解释,当m=7632时,前8次处死的人是 16,12, 14,15, 13,9,11,10

展开讨论

python代码如下:

def fun(n):
    new = [i for i in range(2 * n)]
    idx = 0
    right = n + 1
    while True:
        idx = 0
        arr = new[:]
        res = []
        while len(arr) > n:
            kill = (idx + right - 1) % len(arr)
            if arr[kill] <= n - 1:
                right += 1
                break
            idx = arr.index(arr[kill])
            res.append(arr[kill] + 1)
            arr.remove(arr[kill])
        if len(arr) == n and max(arr) == n - 1:
            print(res)
            return right

print(fun(8))