本帖最后由 a147888123 于 2022-5-18 11:18 编辑
"""
有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,
他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。
由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
在gitee下载了一些源码,看到有这么一道题目,刚开始没有思路,今天在上班路上想出一个思路也不知道对不对
# 初始的时候我也不知道谁是基督徒,谁不是,那么就把他们全部设定为1,等到扔完15个人后剩下全是基督徒,说明需要一个循环,循环到被杀15人停止,剩下15人,那15人都是基督徒
# 被扔后,他们的数值变为0,不影响扔人的记数,继续放哪里占位,等到扔完15人到海里面,如果使用删除数组的方式要去算原来的位置太麻烦,被杀的人用0替代,不影响记数,也不影响最初的数组位置
请大佬看看对不对
[Python] 纯文本查看 复制代码 """
有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,
他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。
由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
思路是对的,有点小错误,又修改了下
[mw_shl_code=python,true]"""
有15个基督徒和15个非基督徒在海上遇险,为了能让一部分人活下来不得不将其中15个人扔到海里面去,
有个人想了个办法就是大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,
他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到扔掉15个人。
由于上帝的保佑,15个基督徒都幸免于难,问这些人最开始是怎么站的,哪些位置是基督徒哪些位置是非基督徒。
"""
list1 = [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
# 初始的时候我也不知道谁是基督徒,谁不是,那么就把他们全部设定为1,等到扔完15个人后剩下全是基督徒,
# 被扔后,他们的数值变为0,不影响扔人的记数,继续放哪里占位,等到扔完15人到海里面
print(len(list1))
kill = 0
temp = 0
while kill <= 15:
for i in range(0, len(list1)):
temp = temp+list1[i]
#print("i值", i, "和值", temp)
if temp == 9: # 表示报到9的那个人的值变为0,表示被扔到海里面
print("i值", i, "记数值", temp)
list1[i] = 0
print(list1)
kill = kill+1
print(kill)
temp = 0
if kill == 15:
break
print(list1)
|