题目描述
有15个基督徒和15个非基督徒在海上遇险,
为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,
报到9的人就扔到海里面,他后面的人接着从1开始报数,
报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,
15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒
思路
一开始先将每个位置上的人视作基督徒,然后开始报数,报9的人定为非基督徒(即扔掉)
重新报数时跳过已经定为非基督徒的位置。这个过程一直重复,直到基督徒只剩15人。
代码
def main():
isChristian = [True] * 30
i = 0
numberOff = 0 # 报数
counter = 30
while counter > 15:
if isChristian[i]:
numberOff += 1
if numberOff == 9:
isChristian[i] = False
counter -= 1
numberOff = 0
i = i + 1
i = i % 30 # 位置的遍历要在[0,29]循环
for i in range(30):
if isChristian[i]:
print("1", end='')
else:
print("0", end='')
if __name__ == '__main__':
main()
运行结果
111100000110111010011000100110