通过滚动6面骰子从起点到达N个空间有多少种可能性?

yee*_*hui 3 python algorithm

我刚刚开始像一周前的python,现在我被困在关于掷骰子的问题上.这是我朋友昨天寄给我的一个问题,我不知道如何自己解决.

想象一下,你正在玩棋盘游戏.你滚动一个6面骰子并向前移动你滚动的相同数量的空间.如果终点距离起点的"n"个空格,请执行一个程序,计算完全到达终点的可能方式.

所以看起来我将使用带有"N"的参数来创建一个函数,当它达到某个点时,让我们说10,所以我们都可以看到有多少可能性从起点开始到10个空格.

我想这与"组合"有关,但我不确定它应该如何在python中编码.

拜托,蟒蛇大师!

Pau*_*kin 8

这是计算精确结果的一种方法,既不使用迭代也不使用递归:

def ways(n):
    A = 3**(n+6)
    M = A**6 - A**5 - A**4 - A**3 - A**2 - A - 1
    return pow(A, n+6, M) % A

for i in xrange(20):
    print i, '->', ways(i)
Run Code Online (Sandbox Code Playgroud)

输出与https://oeis.org/A001592一致

0 -> 1
1 -> 1
2 -> 2
3 -> 4
4 -> 8
5 -> 16
6 -> 32
7 -> 63
8 -> 125
9 -> 248
10 -> 492
11 -> 976
12 -> 1936
13 -> 3840
14 -> 7617
15 -> 15109
16 -> 29970
17 -> 59448
18 -> 117920
19 -> 233904
Run Code Online (Sandbox Code Playgroud)