首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

关于约瑟夫有关问题

2013-01-04 
关于约瑟夫问题http://baike.baidu.com/view/213217.htmdef jos(n,x):li[1]*nk0while li.count(1)1:k

关于约瑟夫问题
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)


期望结果
1111111111
1101111111
1101101111
1101101101
1001101101
1001100101
0001100101
0001100001
0001000001
0001000000

但是陷入了死循环,请高手指点
有几点要求,列表li的初始化定义不能改,不要再增加循环,可以增加变量


[解决办法]
引用:
        k= (x+k-1) % (li.count(1))


这句有问题,分析一下输出就可看出。
[解决办法]
不求效率的话,用下标编号做个列表,然后实际模拟演算,这样应该很直观吧...
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的值么?
[解决办法]
引用:
引用:

我的环境Python3,简单的写法暂时没想通,有个比较复杂的
Python code

def jos(n,x):
all=[1]*n
k=0
while all.count(1)>1:
step = x
while step>0:
k+=1;
k%=n
if al……

all是个关键字吧,当做变量似乎会带来副作用


多谢指出,all是个built-in function,学习了,谢谢....

热点排行