关于约瑟夫有关问题
关于约瑟夫问题
http://baike.baidu.com/view/213217.htm
期望结果
1 1 1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1 1
1 1 0 1 1 0 1 1 1 1
1 1 0 1 1 0 1 1 0 1
1 0 0 1 1 0 1 1 0 1
1 0 0 1 1 0 0 1 0 1
0 0 0 1 1 0 0 1 0 1
0 0 0 1 1 0 0 0 0 1
0 0 0 1 0 0 0 0 0 1
0 0 0 1 0 0 0 0 0 0
但是陷入了死循环,请高手指点
有几点要求,列表li的初始化定义不能改,不要再增加循环,可以增加变量
------解决方案--------------------
这句有问题,分析一下输出就可看出。
------解决方案--------------------
不求效率的话,用下标编号做个列表,然后实际模拟演算,这样应该很直观吧...
------解决方案--------------------
我的环境Python3,简单的写法暂时没想通,有个比较复杂的
楼主你那个里面有考虑到step里面包括为0的值么?
------解决方案--------------------
多谢指出,all是个built-in function,学习了,谢谢....
http://baike.baidu.com/view/213217.htm
def jos(n,x):
li=[1]*n
k=0
while li.count(1)>1:
k= (x+k-1) % (li.count(1))
li[k]=0
print li
print jos(10,3)
期望结果
1 1 1 1 1 1 1 1 1 1
1 1 0 1 1 1 1 1 1 1
1 1 0 1 1 0 1 1 1 1
1 1 0 1 1 0 1 1 0 1
1 0 0 1 1 0 1 1 0 1
1 0 0 1 1 0 0 1 0 1
0 0 0 1 1 0 0 1 0 1
0 0 0 1 1 0 0 0 0 1
0 0 0 1 0 0 0 0 0 1
0 0 0 1 0 0 0 0 0 0
但是陷入了死循环,请高手指点
有几点要求,列表li的初始化定义不能改,不要再增加循环,可以增加变量
------解决方案--------------------
这句有问题,分析一下输出就可看出。
------解决方案--------------------
不求效率的话,用下标编号做个列表,然后实际模拟演算,这样应该很直观吧...
def jos(n, x):
li = [1] * n
ids = range(n)
k = 0
while len(ids):
print li
k = (x + k -1) % len(ids)
id = ids.pop(k)
assert li[id] == 1
li[id] = 0
jos(10, 3)
------解决方案--------------------
我的环境Python3,简单的写法暂时没想通,有个比较复杂的
def jos(n,x):
all=[1]*n
k=0
while all.count(1)>1:
step = x
while step>0:
k+=1;
k%=n
if all[k]==1:
step -= 1
all[k]=0
print(all)
jos(10,3)
#下面是结果:
#[1, 1, 1, 0, 1, 1, 1, 1, 1, 1]
#[1, 1, 1, 0, 1, 1, 0, 1, 1, 1]
#[1, 1, 1, 0, 1, 1, 0, 1, 1, 0]
#[1, 1, 0, 0, 1, 1, 0, 1, 1, 0]
#[1, 1, 0, 0, 1, 1, 0, 0, 1, 0]
#[1, 0, 0, 0, 1, 1, 0, 0, 1, 0]
#[1, 0, 0, 0, 1, 1, 0, 0, 0, 0]
#[1, 0, 0, 0, 1, 0, 0, 0, 0, 0]
#[0, 0, 0, 0, 1, 0, 0, 0, 0, 0]
楼主你那个里面有考虑到step里面包括为0的值么?
------解决方案--------------------
多谢指出,all是个built-in function,学习了,谢谢....