题解 | #走方格的方案数#

走方格的方案数

http://www.nowcoder.com/practice/e2a22f0305eb4f2f9846e7d644dba09b

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int n = 0;//记录向右需要的次数
        int m = 0;//记录向下需要的次数
        int a = 1;//记录全排列
        int cn = 1;//记录向右的排序个数
        int cm = 1;//记录向下的排序个数
        String[] split = new String[2];

        while (in.hasNext()) {
            a = 1;
            cn = 1;
            cm = 1;
            split = in.nextLine().split("\\s+");
            n = Integer.valueOf(split[0]);
            m = Integer.parseInt(split[1]);
            for (int i = 1; i <= (n + m); i++) {
                a*=i;
            }
            for (int i = 1; i <= n ; i++) {
                cn*=i;
            }
            for (int i = 1; i <= m; i++) {
                cm*=i;
            }
            System.out.println(a/cn/cm);


        }
    }
}

先上代码。本题目要求走方格的方案数,有点绕,实际上是一个排列组合的问题,只要➡n次+⬇m次就可以,那么问题转换为求这n次和m次的排列方式有几种,显然是有(n+m)!种。但是!!!➡不管有多少种方式,都是只向右走一步,每一步是平权的,无所谓先后,其实只有一种,所以需要除以n!才能消除这种影响。向下同理。故这个问题到最后异常简单,就是先求3个阶乘,再来一遍除法运算。

全部评论

相关推荐

1 收藏 评论
分享
牛客网
牛客企业服务