python数圈算法_Python实践|围圈数数多人运动

题目

有n个人围成一圈,顺序排号。从第一个人开始报数(从1

到3报数),凡报到3的人退出圈子,问最后留下的是原来

第几号的那位。

def main():

n = int(input("输入人数:"))

List = []

for i in range(1, 【1】):

List.append(i)

s = 0

while 1:

t = 0

for i in range(1, 【2】):

s= 【3】

if s % 3 == 0:

List.pop(i-1-t)

t = 【4】

if len(List) == 1:

print("最后留下的是原来第%d号的那位" % List[0])

break

解答

n = int(input("输入人数:"))

List = []

for i in range(1, n+1):#给n个人编号1,2,3...n,所以最后是n+1

List.append(i) #构造了[1,2,3...,n]列表

s = 0 #这里是计数君s,在数数循环的最外面,是记数数的总数的

while 1: #在List长度不为1的时候,程序不准退出,也就是出现最后一个留下的人不退出

t = 0 #这里是计数君t,每完成一圈数数后t会被清零

for i in range(1, len(List)+1):#这是每一圈进行的小循环

s= s+1 #这里是总计数君s,每数一个人,s会加一

if s % 3 == 0: #也就是数到三的倍数的人稍后会被清除

List.pop(i-1-t) #清除那数字个人(我用下面的图片描述如何删除)

t = t+1 #这也是个计数君,但他和s不一样,

#s是总的计数,而t在碰到s的三的倍数才会加一

if len(List) == 1: #在List长度为1的时候,程序退出

print("最后留下的是原来第%d号的那位" % List[0])

break

if __name__ == '__main__':

main()

3e21476f3eab5250d8831688b9444b47.png

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值