30人围成一圈,1到30依次编号。每个人开始报数,报到9自动离开。有人离开时,就从后一个人开始重新从1报数,以此类推。求离开的前10个人的编号。

浙大版python程序设计上第四章的一道题,开始想到的是两层循环嵌套,但看到下面这篇文章时,将脑海里另一种比较模糊的简便方法具象化了。【Python笔记】Python/C++解决约瑟夫环问题_python 约瑟夫环是一个很有意思的算法,已知有41个人围坐在一张圆桌周围,从第-CSDN博客

l=list(range(1,31))        #列出在场上的所有人编号
p=[]                        #离开的人的编号列表,开始时为空
index=0                    #遍历在场编号列表所使用的下标
for i in range(10):        #踢出10个人,即循环10次
    #print(l)#测试用
    index=(index+8)%len(l) 
    #每次踢出后因为后续pop操作,index值不变但直接指向了下一人
    #场上人数一直变化,所以index上限一直变化,需要更新index再上限范围内防止错数
    p.append(l.pop(index)) #更新被踢出的人的名单
print(p)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值