赞
踩
问题描述:
1、30 个人在一条船上,超载,需要 15 人下船。于是人们排成一队,排队的位置即为他们的编号。报数,从 1 开始,数到 9 的人下船。如此循环,直到船上仅剩 15 人为止。问都有哪些编号的人下船了呢?
2、有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
#方式一: def dieorlive(n): """ :param n: 人数 :return: """ if n < 9: print("输入大于9,请重新输入!") check = 0 lis = [1 for i in range(n + 1)] i = 1 j = 0 while i <= n + 1: if i == n + 1: i = 1 elif j == n // 2: break else: if lis[i] == 0: i += 1 continue else: check += 1 if check == 9: lis[i] = 0 check = 0 print("{}号下船了".format(i)) j += 1 else: i += 1 continue #方式二: def dieorlive(): persons = [True] * 30 counter, index, number = 0, 0, 0 while counter < 15: if persons[index]: number += 1 if number == 9: persons[index] = False counter += 1 number = 0 index += 1 index %= 30 for person in persons: print('存活:' if person else '下船', end='')
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。