Josephu环(约瑟夫环)问题_Python解决

"""
幸运的女人(Josephu环问题)
有15个男人和15个女人乘船在海上遇险,为了让一部分人活下来,不得不将其中15个人扔到海里,
有个人想了个办法让大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,
他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到将15个人扔到海里。
最后15个女人都幸免于难,15个男人都被扔到了海里。
问这些人最开始是怎么站的,哪些位置是男人,哪些位置是女人。
"""

people = [True] * 30  # True代表活人
index, dead, num = 0, 0, 0  # 人在列表中的位置、死亡人数、报的数字

while dead < 15:
    if people[index]:  # 人活着才能报数,所以判断人是否活着
        num += 1  # 数数是从1开始的,所以在这里提前+1
        if num == 9:  # 报数到9就扔下去
            people[index] = False
            num = 0
            dead += 1
        # 而不是在这个地方 num += 1
    index += 1
    index %= 30  # 保证大于一圈后的index对应到人的位置

woman_index = []  # 女人的位置列表
man_index = []  # 男人的位置列表
for i, gender in enumerate(people):
    if gender:
        woman_index.append(i)  # 把活着的人的索引,全部加到女人索引列表里
    else:
        man_index.append(i)  # 把海里的人的索引,全部加到男人索引列表里

print('女:', woman_index)
print('男:', man_index)

结果:

女: [0, 1, 2, 3, 9, 10, 12, 13, 14, 16, 19, 20, 24, 27, 28]
男: [4, 5, 6, 7, 8, 11, 15, 17, 18, 21, 22, 23, 25, 26, 29]

你可能感兴趣的:(python练习题)