一群猴子要选新猴王。新猴王的选择方法是:让N只候选猴子围成一圈,从某位置起顺序编号为1~N号。从第1号开始报数,每轮从1报到3,凡报到3的猴子即退出圈子,接着又从紧邻的下一只猴子开始同样的报数。如此不断循环,最后剩下的一只猴子就选为猴王。请问是原来第几号猴子当选猴王?
输入样例:
11
输出样例:
7
num=int(input())
a=list(range(num+1))
num=a[1:]#给猴子编号,1~N
while True:
for i in range(1,4):#从1开始数,数3次(即循环3次),然后第三只出局
num.append(num[0])#猴子数完数就去列表的末尾
del(num[0])#删除变量,方便下一只猴子下次使用
if(i==2):#已经数了2只猴子,第三只猴子出局
num.pop(0)#从列表中删除出局的猴子
if len(num)==1:#列表中只有一只猴子了,就是大王
break
print('猴子大王的编号为:',int(num[0]))
for i in range(1,4):#从1开始数,数3次(即循环3次),然后第三只出局
不应该range(1,3)吗?
你这样循环不行吧,应该修改a的值吧,把出局的删除。
随便写了一下,不知道对不对
def fun(n:list, m=3):
if len(n) == 1:
return n[0]
else :
if len(n) >= m:
print(f"{n[m - 1]}号退出游戏!")
n.remove(n[m - 1])
n = reverse_list(n, m -1)
print("剩余人:")
print(n)
else :
num = m % len(n)
if num:
print(f"{n[num - 1]}号退出游戏!")
n.remove(n[num - 1])
n = reverse_list(n, m - 1)
print("剩余人:")
print(n)
else:
print(f"{n[-1]}号退出游戏!")
n.remove(n[-1])
n = reverse_list(n, m - 1)
print("剩余人:")
print(n)
return fun(n)
def reverse_list(n:list, index):
new_list = n[index:]
new_list.extend(n[:index])
return new_list
number = eval(input("请输入人数:"))
li = list(range(1, number))
fun(li)
# 控制台输出结果
# 请输入人数:11
# 3号退出游戏!
# 剩余人:
# [4, 5, 6, 7, 8, 9, 10, 1, 2]
# 6号退出游戏!
# 剩余人:
# [7, 8, 9, 10, 1, 2, 4, 5]
# 9号退出游戏!
# 剩余人:
# [10, 1, 2, 4, 5, 7, 8]
# 2号退出游戏!
# 剩余人:
# [4, 5, 7, 8, 10, 1]
# 7号退出游戏!
# 剩余人:
# [8, 10, 1, 4, 5]
# 1号退出游戏!
# 剩余人:
# [4, 5, 8, 10]
# 8号退出游戏!
# 剩余人:
# [10, 4, 5]
# 5号退出游戏!
# 剩余人:
# [10, 4]
# 10号退出游戏!
# 剩余人:
# [4]
num=int(input())
a=list(range(num+1))
num=a[1:]#给猴子编号,1~N
while True:
for i in range(1,4):#从1开始数,数3次(即循环3次),然后第三只出局
if(i==2):#已经数了2只猴子,第三只猴子出局
num.pop(0)#从列表中删除出局的猴子
num.append(num[0])#猴子数完数就去列表的末尾
del(num[0])#删除变量,方便下一只猴子下次使用
if len(num)==1:#列表中只有一只猴子了,就是大王
break
print('猴子大王的编号为:',int(num[0]))
# for 中间开始的换个顺序,出局的猴子不用加进列表
您好,我是有问必答小助手,您的问题已经有小伙伴解答了,您看下是否解决,可以追评进行沟通哦~
如果有您比较满意的答案 / 帮您提供解决思路的答案,可以点击【采纳】按钮,给回答的小伙伴一些鼓励哦~~
ps:问答VIP仅需29元,即可享受5次/月 有问必答服务,了解详情>>>https://vip.csdn.net/askvip?utm_source=1146287632