ccfcsp-201712-2-游戏-python

如题

题目分析

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())

猜你喜欢

转载自blog.csdn.net/m0_37330370/article/details/115177131