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