约瑟夫生死游戏(简便解法)--python
作者:互联网
先说一下约瑟夫生死游戏的问题描述:
30个旅客同乘一条船,因为严重超载,加上风高浪大,危险万分;因此船长告诉大家,只有将全船一半的旅客投入海中,其余人才能幸免遇难。无奈,大家只得同意这种办法,并议定30个人围成一圈,由第一个人开始,依次报数,数到第9个人,就把他投入大海中,然后从他的下一个人开始从1数起,数到第9个人,再将她投入大海,如此循环,直到剩下15个人乘客为止。问哪些位置是将被扔到大海的位置。
这个题许多人想到的是使用链表解决,但链表的繁琐和不灵活造成很多c友们抵制的情绪
那有没有既简单而且快速的解法呢
当然是有的
以下的写法可以使用任何的编程语言实现,我就先用python展示一下
先上代码,然后在解析一下我的思路
a={}
for i in range(1,31):
a[i]=1
sheng=0
//sheng在这里表示剩下的人数
sum=0
//sum是用来计数的,当sum等于九的时候会重置
i=1
while i<=31:
if i==31:
i=1
elif sheng==15:
break
else:
if a[i]==0:
i=i+1
continue
else:
sum+=1
if sum==9:
a[i]=0
sum=0
print(i)
sheng+=1
else:
i=i+1
continue
没错,就是这么简单(如果去掉注释的话代码量更少)
说一下思路吧:
(1)开辟存放人的空间a{}
(2)使用循环将1到30赋值为一(注意索引为0的位置还是0)
(3)使用while循环,循环内部,i==31的时候跳回去,剩下人数15的时候结束循环,sum到九的时候清零,并把那个人的值变为零
就这么简单,根本不需要那么复杂(虽然也能做出来)
这个思路可以用在任何编程语言上(Java,c,c++等)
标签:15,sheng,python,sum,30,约瑟夫,else,31,解法 来源: https://www.cnblogs.com/lihangluoyue/p/12372193.html