如题
题目分析
1、可以用列表模拟,A[i]=1表示第i个小朋友依旧没有被淘汰,若A[i]=0则表示第i个小朋友已经 被淘汰了,若列表中1的数量为1,则输出该小朋友的编号。
2、也可以用队列进行模拟。若该小朋友被淘汰,则将队首元素弹出,若不被淘汰,则弹出并加入队尾。这样做的好处在于可以跳过每次需要对比列表中该位置是否是0(是否已经被淘汰了)的时间.
代码1
n,k=map(int,input().split())
a=[1]*n
i,t=0,1
while a.count(1)>1:
while a[i] == 0:
i = (i + 1) % n
if t%k==0 or t%10==k:
a[i]=0
i = (i + 1) % n
t += 1
print(a.index(1)+1)
代码2
from queue import Queue
n,k=map(int,input().split())
q=Queue()
for i in range(1,n+1):
q.put(i)
t=1
while q.qsize()>1:
if t%k==0 or t%10==k:
q.get()
else:
q.put(q.get())
t+=1
print(q.get())