Python版的迷你程序——约瑟夫环

该博客介绍了一个Python实现的约瑟夫环问题解决方案。通过模拟乘客下车过程,当人数超过规定载客量时,按照特定报数规则剔除乘客。最终返回留下的乘客编号。代码中展示了如何创建列表并进行迭代,移除指定位置的元素,直至满足条件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        约瑟夫环的问题,具体到某个编码来解决可谓是很多很多,这里对于约瑟夫环先打个比方:一辆小巴车被查出严重超车,最多载10人的超载至30人。于是乘客下车排成一队,排队的位置即为他们的编号。然后就是报数,从1开始,数到6的人被安排滞后乘车。如此循环,直到不超过 10 人为止,问都有哪些编号的人需要下车了,哪些编号可以乘车?当然这里只考虑仅有一辆车的情况哈,至于后续车和后续登车的问题不做考虑哈。

        python代码把编号和列表元素的值一一对应了,每次移除了列表中编号(值)的匹配项。

#!/usr/bin/env python3
# -*- coding: UTF-8 -*-
#

def joseph(totalnum, step, staynum):
    lists = list(range(1, totalnum+1))
    checkcnt = 0
    while len(lists) > staynum:
        for i in lists[:]:         # 列表中的值 不是列表的索引          lists[:]   
            checkcnt += 1
            if checkcnt == step:
                checkcnt = 0
                lists.remove(i)    # 移除列表中某个值的第一个匹配项     list.remove(obj)
                print("%-3d号下车了" % i)
    return lists

stays = joseph(30, 6, 10)
print("最后留下%-3d人" % len(stays))
print("编号是:", stays)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

clyfk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值