chaser


私信TA

用户名:lgs

访问量:250

签 名:

等  级
排  名 13585
经  验 918
参赛次数 0
文章发表 1
年  龄 0
在职情况 学生
学  校 BIT
专  业

  自我简介:

TA的其他文章

解题思路:

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

参考代码:

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分

1 人评分

  评论区

  • «
  • »