Python——约瑟夫生者死者小游戏

问题描述:

30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。

报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止,问都有哪些编号的人下船了呢?

解决思路:

给30个人编号1-30,每个人的初值都是1(在船上),i代表他们的编号,j代表被扔下船的人数(j=15时循环结束),用check记数,check=9时将对应编号i的人置0(扔下船)并让check重新记数。

当i等于31时,手动将i置为1

当对应编号i的人值为0时,代表此人已经不在船上,i+1找到下一个人记数,以此类推。

代码实现:

people={}
#此处for循环会输出{1: 1, 2: 1, 3: 1, ..., 30: 1},相当于给30个人都赋初始值1
for x in range(1,31):
    people[x]=1
# print(people)
#check记数,0-9;i为人们的编号,1-30;j为下船的人数
check=0
i=1
j=0
while i<=31:
    #因为只有30人,当i等于31时,手动将i置为1
    if i == 31:
        i=1
    #下船15人后退出循环
    elif j == 15:
        break
    else:
        #people[i]为0时,表示此人已下船,i加1,check不增加,继续循环
        if people[i] == 0:
            i+=1
            continue
        else:
            check += 1
            # i=1,check=1,...i=9,check=9
            if check == 9:
                #数到9的人的值设为0(下船),check置0,重新开始计数
                people[i]=0
                check = 0
                print("{}号下船了".format(i))
                #j为下船的人数,下一个人j加1
                j+=1
            else:
                i+=1
                continue

结果:

你可能感兴趣的:(python)