【问题描述】
有n个人围成一圈,从1开始按顺序编号,从第一个人开始从1到k报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。
编写程序,模拟上面的游戏,要求初始人数n和报数临界值k可以自由指定。运行程序并观察游戏进行的过程。
【输入形式】
人数n和退出数k
【输出形式】
每轮剩余的人的编号(从第0轮开始)
【样例输入】
10,3
【样例输出】
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[4, 5, 6, 7, 8, 9, 10, 1, 2]
[7, 8, 9, 10, 1, 2, 4, 5]
[10, 1, 2, 4, 5, 7, 8]
[4, 5, 7, 8, 10, 1]
[8, 10, 1, 4, 5]
[4, 5, 8, 10]
[10, 4, 5]
[10, 4]
4
答案的后半截是这样的:
str_n, str_k = input().split(",")
int_n = int(str_n)
int_k = int(str_k)
int_lst = list(range(1,int_n+1))
print(demo(int_lst, int_k))
求教!!!
def demo(int_lst, int_k):
index = 0
step = int_k # 从1号开始报数,数到int_k的那个人出列
print(int_lst)
while len(int_lst) > 1:
print(int_lst)
index = (step - 1) % len(int_lst) # 列表的索引
int_lst = int_lst[index + 1:] + int_lst[:index] # 删除出列的人
#int_lst.pop(index)
return int_lst[0]
测试结果截图如下: