给定一个m
by by n
Chocolate棒,将m,n
输出将其分成mn
1乘1 的方式数(每次中断发生在网格线上)。
顺序很重要。碎片也很明显,因此1 x 3巧克力棒两端的两个碎片是不相等的。
例如,对于2 x 2块,我们有:
_ _ _ _ _ _ _ _
|_‖_| -> |‗| |_| -> |_| |‗| -> |_| |_|
|_‖_| |_| |_| _ |_| _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|_‖_| -> |_| |‗| -> |‗| |_| -> |_| |_|
|_‖_| |_| |_| |_| _ _ _
|_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_‖_| -> |_| |_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_|_| |_‖_| |_| |_|
_ _ _ _ _ _ _ _
|‗|‗| -> |_|_| -> |_‖_| -> |_| |_|
|_|_| _ _ _ _ _ _
|_‖_| |_| |_| |_| |_|
因此,有4种方法可以分解2 x 2的巧克力棒。
规则
通过函数输入,STDIN,命令行或类似输入,输入将是两个整数。输出一个数字,可以分解巧克力的数量。
由于数字上升很快,因此请不要担心输出是否超出您语言的整数限制–只要算法在理论上适用于所有可能的输入,您的提交就将有效。
测试用例
输出不依赖于命令的顺序m,n
,因此列出了测试用例,使得m <= n
。
1 1 -> 1
1 2 -> 1
1 3 -> 2
1 4 -> 6
1 5 -> 24
1 10 -> 362880
2 2 -> 4
2 3 -> 56
2 4 -> 1712
2 5 -> 92800
2 10 -> 11106033743298560
3 3 -> 9408
3 4 -> 4948992
3 5 -> 6085088256
3 10 -> 76209753666310470268511846400
4 4 -> 63352393728
A261964是排列在三角形中的巧克力编号,使得每一行对应于总和m+n
。
options(expressions=...)
和参数--max-ppsize=
)将导致比此更长的代码。