目录
游戏规则:
30 个人在一条船上,超载,需要 15 人下船。
于是人们排成一队,排队的位置即为他们的编号。
报数,从 1 开始,数到 9 的人下船。
如此循环,直到船上仅剩 15 人为止
算法思考:
毫无疑问,每数到第九个人就下船,并且重新开始计数,我们可以简单的想到以下代码:
while i:
check += 1
if check == 9:
people[i] = 0
check = 0
print("{}号下船了".format(i))
else:
i+=1
continue
但是在我们的代码中,并不能体现当第一轮每九个人(也就是3个人)下船后,再一次计数,此时people[ ]中之前下船的人仍然占据着位置,并没有真正的清除。则需要continue跳过:
if people[i] == 0:
i+=1
continue
else:
check+=1
if check == 9:
people[i]=0
check = 0
print("{}号下船了".format(i))
如此一来会跳过之前已经下船的人编号,聪明的读者也发现了people[i]==0是用的字典方法,也就是说,想要判断该编号的人有没有下船,则需要字典的方法,编号即键对应的值是否为1来判断:
people={}
for x in range(1,31):
people[x]=1 #创建关于people的字典,每个键的值均为1
代码实现:
people={}
for x in range(1,31):
people[x]=1 #创建people字典,每个编号的值都为1
# print(people)
check=0 #循环9,记数
i=1 #people的编号
j=0 #下船人数或者船余下人数
while i<=31:
if i == 31:
i=1 #每当循环到最后一个人时,重新循环
elif j == 15:
break #如果场上剩余15人,终止循环
else:
if people[i] == 0: #读取到如果该编号的值等于0即已经下船 则跳转下一位
i+=1
continue
else:
check+=1 #循环9记数加一
if check == 9:
people[i]=0
check = 0
print("{}号下船了".format(i)) #如果记数满了 则输出,并且多一位下船人
j+=1
else:
i+=1
continue #循环未满,下一位