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)