“猴子选大王”(约瑟夫问题)

“猴子选大王”(约瑟夫问题)

问题描述:

这道题做了好几次都通不过
img

img

n,m=map(int,input().split())
a=[]
d=[]
b=0
c=0
e=""
for i in range(1,n+1):
    a.append(i)
while a:
    if b==m-1:
        e=a[c]
        a.pop(c)
        d.append(e)
        b=0
        e=""
    b+=1
    c+=1
    if c>=len(a):
        c=0
    if len(a)==1:
        break
for i in d:
    print(i,end=" ")
print()
for i in a:
    print(i)

刚开始学,写的很乱,思路不是很清晰

以下代码对你可能有帮助。

n,m=map(int,input().split())

out=[]
n=list(range(1,n+1))

def go(count=0):
    for i in n:
        count+=1
        if count==m:#淘汰
            out.append(i)
            count=0
    for i in out:#删除淘汰的猴子
        if i in n:
            n.remove(i)
    if len(n)!=1:
        go(count)
go()
print(out)
print(n[0])

这是我临时写的,可能有错误,不过在测试当中应该是可以符合题意。