有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
移除报数为3的人,剩下的人继续报数,此时需要把前面已经报过数的人移到末尾,然后再从头报数,这样就满足了顺序要求。也就是删除一个报数为3的人,就要通过move()移动一次
#轮转交换函数,
def move(m,arr,n):
arr_new = [0]*n
for j in range(n):
arr_new[(j+m)%n] = arr[j]
return arr_new
#循环删除3的倍数成员
def dele(p):
while len(p)>2:
#移除报数为3的人,剩下的人继续报数,此时需要把前面已经报过数的人移到末尾,
#然后从头报数,也就是删除一个人就要通过move函数移动一次
p.remove(p[2])
p = move(len(p)-2,p,len(p))
if len(p) == 2:
print(p[1])
break
if __name__ == '__main__':
#把每个人的编号作为列表元素 ,列表为p
person = int(input("请输入总人数:"))
p = []
for i in range(0, person):
p.append(i + 1)
print(p)
#淘汰报数为3的函数
dele(p)
运行结果:
总人数为10 的时候,最后一个剩余的人为原先的4号
本文地址:https://blog.csdn.net/qq_41761265/article/details/107646887
如对本文有疑问, 点击进行留言回复!!
JWT RS256加解密、JWK获取PublicKey和PrivateKey、从已存在公私钥加解密JWT
pytorch安装实录(win10+cuda8+pycharm+anaconda)
小练习题(69)有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位
网友评论