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个阶乘,再来一遍除法运算。