编写程序,模拟报数游戏。有n个人围成一圈,顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。
n=int(input("请输入总人数:n="))
k=int(input("请规定报到数字几的人退出圈子:k="))
circle=list(range(1,n+1))
print("游戏开始前的初始位置",circle)
num=1
i=1
while len(circle)!=1:
circle.append(circle.pop(0)) #把已报数的人取出放到队尾,以此实现围成圈循环往复
num+=1
if num==k:
del circle[0] #把报到规定数字的人踢出圈子
num=1 #重新从1开始报数
print("剩余的列表是:",circle)
i += 1
print("最后留下的人是原来第{}号的人".format(*circle))
def game(n, k):
lst = list(range(1, n+1))
print(f"游戏开始之前的初始位置\n{lst}")
count = 0
while len(lst)>1:
for i in range(k-1): # k-1次将首部元素放到尾部
lst.append(lst.pop(0))
del_num = lst.pop(0)
count += 1
print(f"第{count}次删掉的是{del_num}")
print(f"剩下的人:", lst)
return lst[0]
n = int(input("总人数 n = "))
k = int(input("删除报号数 k = "))
result = game(n, k)
print(f"最后留下的是原来的{result}号")