解题思路:

采用逐个模拟的思路解决约瑟夫环的问题
注意事项:

参考代码:

n = int(input())
m = 3
people = []                         #这个列表用于储存初始编号,实际上是多余的
life = []                           #这个列表用于记录人的存活状态,实际上可以简化
result = []                         #这个列表用于记录报数结果
death = []                          #这个列表用于记录死亡名单及顺序,可以和life[]合并
#初始化列表
for i in range(n):
    people.append(i + 1)
    life.append(True)
    result.append(0)
#初始化报数值和起点
key = 1
i = 0
#报数循环
while len(death) < n - 1:
    if life[i] == True:             #首先判断是否存活
        result[i] = key             #报数
        if result[i] == m:          #报到了选定值的倒霉蛋
            life[i] = False         #倒霉蛋死了
            key = 1                 #重置报数值
            death.append(people[i]) #死亡名单又多了一个
        else:
            key = key + 1           #运气不错,继续报数
    #保证成环
    if i < n - 1:
        i = i + 1
    else:
        i = 0
print(people[life.index(True)])     #输出幸运儿初始编号,如果需要,可以按顺序输出死亡名单


点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论