“猴子选大王”(约瑟夫问题)
问题描述:
这道题做了好几次都通不过
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])
这是我临时写的,可能有错误,不过在测试当中应该是可以符合题意。