逻辑分析

约瑟夫环

https://ac.nowcoder.com/acm/problem/22227

n, k, m = input().split()
n = int(n)
m = int(m)
k = int(k)
lis = [0 for i in range(n)]  # 生成n个人,每个人的下标就是该人的编号
index = k                    # 第一个开始报数的人的下标(编号)为题目给的k
c = 0                        # 记录报数的序号
while lis.count(0) > 1:      # 当列表中只有一个人的时候停止循环
    if index >= len(lis):    # 当下标超出时,则返回到第一个人重新开始
        index = 0
    if lis[index] == 0:
        c += 1               # 记录报数
        if c == m:           # 报到 m 时,将此人的值改为 1
            lis[index] = 1
            c = 0            # 记录清零准备下次报数
    index += 1
print(lis.index(0))          # 循环结束列表中只剩一个人(0)该人的下标既是编号

全部评论

相关推荐

做牛做马大喷菇:很难不怀疑是包装的,你简历上的内容,三年经验都挺难做出来
点赞 评论 收藏
分享
01-26 22:20
已编辑
门头沟学院 Java
Java抽象带篮子:项目很nb了,现在好好准备八股和算法吧,早点找实习,可以看看我的置顶帖子。帖子里写了怎么改简历,怎么包装实习经历,还有2个高质量可速成的项目话术,和我的牛客八股笔记专栏
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务