嘿!又有两天没有写博客了!
这期博客给大家带来一道编程题,希望能对你们有帮助!
前言
如果有哪里解析错误或者不理解的,都可以私聊我哈!谢谢!
一,题目
请计算n*m的棋盘格子(n为横向的格子数,m为竖向的格子数)从棋盘左上角出发沿着边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往上走。
注:沿棋盘格之间的边缘线行走
数据范围: 1 \le n,m \le 8 \1≤n,m≤8
二,解析
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
- 对于上面的nm(33)的格子,有两种情况
a. 如果n或者m为1,则只有一行或者一列,从左上角走到右下角的路径数为n + m比如: 1 * 1格子,可以先向下走,再向右走,到达右下角;或者先向右走,再向下走,到达右下角,共两条,即 1 + 1 = 2,对于1 * m和 n * m的情况自己画一下。
b. 如果n,m都大于1,那么走到[n][m]格子的右下角只有两条路径,
<1>: 从[n - 1][m]格子的右下角向下走,到达
<2>: 从[n][m - 1]格子的右下角向右走,到达
所以走到[n][m]格子的右下角的数量为[n-1][m] + [n][m - 1],可以通过递归实现,情况a为递归的终止条件。
a:
b:
三,代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()){
int m = scanner.nextInt();
int n = scanner.nextInt();
System.out.println(med(m,n));
}
}
public static int med(int m , int n ){
if ((m==1&&n>=1)||(n==1&&m>=1)){
return m+n;
}
return med(m-1,n)+med(m,n-1);
}
}
这期博客到此就结束了!希望对你们有帮助,
记得关注小猪!
咱们下期再见啦~