题解 | 约瑟夫环

约瑟夫环

https://www.nowcoder.com/practice/e417cfe32c74416ca38247f619ddb322

n,k,m=map(int,input().split())
my_dict={x:True for x in range(n)}

start=k
for i in range(1,n):                        # 外层循环的次数为n-1次,通过n-1轮游戏,淘汰掉n-1个数字,剩下的那个数字即代表获胜者
    loop=0                                  # 内层循环的条件变量
    pointer=start                      
    while loop < m-1:                       # 内层循环,当 pointer经过m-1次有效移动(加一)后,内层循环结束(每一次内层循环表示一轮游戏结束,可以淘汰掉一个人)
        flag=True                           
        while flag:                         # 这个while循环用于进行pointer指针的有效加1,因为pointer移动过程中,如果my_dict[pointer]为False,则表示无效移动
            pointer=pointer+1
            if pointer == n:                # 如果pointer等于n,表示来到了环的末尾,此时需要将pointer执行环首
                pointer=0
            if my_dict[pointer]==True:      # 若 my_dict[pointer]==True 表示有效移动,意味着本次有效移动结束,将flag置为False,退出循环
                flag=False
        loop+=1                             # 每次有效移动(while flag:循环结束)后,将loop加1
    my_dict[pointer]=False                  # 每层循环结束(一轮游戏结束后),标记哪个数字被淘汰掉

    flag=True                               # 然后寻找下一轮游戏的起始位置
    while flag:             
            pointer=pointer+1
            if pointer == n:
                pointer=0
            if my_dict[pointer]==True:
                flag=False
    start=pointer        
#以上整个循环结束后,pointer所指向的数字 即为最后的获胜者                   
print(pointer)

            
        



        # if my_dict[pointer]==False:        
        #     if pointer+1 == n:
        #         pointer=0
        #     else:
        #         pointer+=1
        # else:
        #     loop+=1                        # loop + 1 表示为有效的+1
        #     if pointer+1 == n:
        #         pointer=0
        #     else:
        #         pointer+=1
        # if loop == m-1:
        #     my_dict[pointer]=False
        #     if pointer+1 == n:
        #         pointer=0
        #     else:
        #         pointer+=1
        # # print(f"loop={loop},pointer={pointer}")
#     print(my_dict)    
#     start=pointer

# print(start)





全部评论

相关推荐

fRank1e:吓得我不敢去外包了,但是目前也只有外包这一个实习,我还要继续去吗
点赞 评论 收藏
分享
机械打工仔:我来告诉你原因,是因为sobb有在线简历,有些HR为了快会直接先看在线简历,初步感觉不合适就不会找你要详细的了
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务