4

私はヨセフスの問題を解決しようとしています、そして私は動作するコードを持っています。

def J(n,x):
    li=range(1,n+1)
    k = -1
    while li:
        print li
        k = (k+x) % len(li)
        li.pop(k)
        k =k- 1
J(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

これどうやってするの?

def J(n,x):
    li=[1]*10
    k = -1
    while li.count(1)>0:
        print li
        k = (k+x) % len(li)
        li[k]=0
        k =k- 1
4

1 に答える 1

5
>>> def J(n,x):
    li=range(1,n+1)
    k = -1
    while li:
        for i in xrange(1,n+1):
        if i in li:
            print 1,
        else:
            print 0,
    print
        k = (k+x) % len(li)
        li.pop(k)
        k =k- 1

>>> J(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

さらに良い(あなたの代わりにワンライナーprint li):

>>> def J(n,x):
    li=range(1,n+1)
    k = -1
    while li:
        print [1 if i in li else 0 for i in xrange(1,n+1)]
        k = (k+x) % len(li)
        li.pop(k)
        k =k- 1

>>> J(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]

あなたもあなたがprint ' '.join(['1' if i in li else '0' for i in xrange(1,n+1)])望む出力を正確に持つために使うことができます:-)

于 2012-09-18T14:44:47.500 に答える