模拟报数游戏
Description
有n个人围成一圈,按1~n顺序编号,从第一个人开始从1到k(假设k=3)报数,报到k的人退出圈子,然后圈子缩小,从下一个人继续游戏,问最后留下的是原来的第几号。如:n=4,则按1 2 3 4编号
第一轮 3出局,留下 4 1 2
第二轮 2出局,留下 4 1
第三轮 4出局,留下1
最后留下1号。
Input
一行,两个整数n和k,如:
4 3
Output
一个整数,即最后留下的序号,如:
1
Sample Input 1
4 3
Sample Output 1
1
Hint
3<n<1000,0<k<1000。
Source
中学生可以这样学Python,P89例5-3
代码如下:
from itertools import cycle
n,k=map(int,input().split())
lst=list(range(1,n+1))
def tiaochu(lst,k):
n_lst=lst[:]
while len(n_lst)>1:
c=cycle(n_lst)
##从1到k报数
for i in range(k):
t=next(c)
##报到k的时候切片,后面加上前面
index=n_lst.index(t)
n_lst=n_lst[index+1:]+n_lst[:index]
#print(n_lst)
return n_lst[0]
print(tiaochu(lst,k))