python题集-约瑟夫问题

部署运行你感兴趣的模型镜像

n 个人围成一圈,从第一个人开始报数,数到 m 的人出列,再由下一个人重新从 1 开始报数,数到 m 的人再出圈,依次类推,直到所有的人都出圈,请输出依次出圈人的编号。

输入格式:

输入两个整数 n,m。

输出格式:

输出一行 n 个整数,按顺序输出每个出圈人的编号。


说明/提示

1<=n,m<=100

流程图展示:

代码展示:

代码初始化:

n,m=map(int,input().split())
ls1=[]
ls2=[]
count=0

n,m=map(int,input().split()):通过用户输入获取两个整数nmn代表总人数,m代表每次数到第m个人出列。

ls1=[]:创建一个空列表ls1,用来存储从 1 到n的编号。

ls2=[]:创建一个空列表ls2,用于存储出列人员的编号。

count=0:初始化计数器count,其作用是记录当前数到第几个人。

生成人员编号列表:
for i in range(n):
    ls1.append(i+1)

借助for循环,把从 1 到n的编号依次添加到列表ls1中。

模拟出列过程:
while True:
    for i in ls1:
        count+=1
        if i in ls2:
            count-=1
        if count==m:
            if i not in ls2:
                ls2.append(i)
                count=0
            else:
                count-=1
        
    if len(ls2)==n:
        break

while True:构建一个无限循环,直到所有人都出列才会终止。

for i in ls1:对列表ls1中的每个编号进行遍历。

count+=1:每次遍历,计数器count加 1。

if i in ls2:若当前编号i已经在出列人员列表ls2中,就将计数器count减 1,从而跳过该编号。

if count==m:当计数器count等于m时,意味着数到了第m个人。

if i not in ls2:若当前编号i不在出列人员列表ls2中,就把该编号添加到ls2里,同时将计数器count重置为 0。

else:若当前编号i已经在出列人员列表ls2中,就将计数器count减 1。

if len(ls2)==n:当出列人员列表ls2的长度等于总人数n时,说明所有人都已出列,此时跳出循环。

运行示例:

当n=10,m=3时:

总体代码展示:
n,m=map(int,input().split())
ls1=[]
ls2=[]
count=0

for i in range(n):
    ls1.append(i+1)

while True:
    for i in ls1:
        count+=1
        if i in ls2:
            count-=1
        if count==m:
            if i not in ls2:
                ls2.append(i)
                count=0
            else:
                count-=1
        
    if len(ls2)==n:
        break
    
for i in range(n):
    if i==len(ls2):
        print(ls2[i])
    else:
        print(ls2[i],end=' ')

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值