n个人(编号1~n)围成一圈从编号为1的开始报数,从1报数到m,报到m的人出来,下一个人继续重新从1开始报数,编程求最后一个留下的人的编号

# 如n=3,m=4

# 第一次出队:1

# 第二次出队:3

# 最后留下:2

python代码>>

def fun(n,m):
    circle=[]  # 队伍列表
    # 列表中每个元素的值代表这些人的实际编号,1..2..3...n
    for i in range(1,n+1):
        circle.append(i)
    num=1  # 从1开始报数
    # 队伍中不是只剩下一个人,就要报数
    while len(circle)!=1:
        # 每次都是列表最左面的数报数;当报完一次数,将列表最左面的这个数 放在列表最后面 ,准备下轮接着报
        circle.append(circle.pop(0))
        # 报完1后还要接着报2...3...4...m  
        num+=1
        # 当下一个将要报到约定数m时,需有人出列,就是目前列表最左端的那个准备报数的人,将其删除
        if num==m:            
            del circle[0]
            num=1
    # 结束循环后,列表中只剩下一个人,将其返回
    return circle[0]

# 测试用例
res = fun(3,4)
print(res)