从前有一只小小的机器人叫小器,小器站在一个M*N的格子地板的最左上角,很孤单,世界辣么大,它也想去看看,经过不懈的努力它终于可以(只能)向下或者向右移动啦,它有一个宏伟的愿望就是要穿过格子地板到达右下角的砖,所以如果小器告诉你M和N,你能不能帮它计算一下这中间可以有多少条独一无二的路径?
注意:这是一道OJ题目,请用两个input(“”)分别获得M和N的值。
测试用例:
输入:
3
3
输出:
6
输入:
1
1
输出:
1
解析:
如上图,从出发点即蓝色点走到终点即红色点需要向右走
m−1
m
−
1
个格子,向下走
n−1
n
−
1
个格子,总共必须要走
m+n−2
m
+
n
−
2
个格子,所以总共的走法即是在
m+n−2
m
+
n
−
2
中选出
m−1
m
−
1
个向右走的格子或
n−1
n
−
1
个向下走的格子,用组合公式描述即
Cm−1m+n−2
C
m
+
n
−
2
m
−
1
或
Cn−1m+n−2
C
m
+
n
−
2
n
−
1
, 又已知
Cnm=m!n!(m−n)!
C
m
n
=
m
!
n
!
(
m
−
n
)
!
,故上述公式展开即为
Cm−1m+n−2=Cn−1m+n−2=(m−1+n−1)!(m−1)!(n−1)!
C
m
+
n
−
2
m
−
1
=
C
m
+
n
−
2
n
−
1
=
(
m
−
1
+
n
−
1
)
!
(
m
−
1
)
!
(
n
−
1
)
!
.
in_num1 = int(input(""))-1
in_num2 = int(input(""))-1
import math
num1 = math.factorial(in_num1+in_num2)
num2 = math.factorial(in_num1)
num3 = math.factorial(in_num2)
Num = int(num1//(num2*num3))
print(Num)