你好呀,我是灰小猿,一个超会写bug的程序猿!
欢迎大家关注我的专栏“每日蓝桥”,该专栏的主要作用是和大家分享近几年蓝桥杯省赛及决赛等真题,解析其中存在的算法思想、数据结构等内容,帮助大家学习到更多的知识和技术!
标题:振兴中华
小明参加了学校的一个趣味运动会,其中的一个项目是:跳格子
地上画着一些格子,每个格子里写一个数字,如下所示:(也可参见p1.jpg)
从我做起振
我做起振兴
做起振兴中
起振兴中华
比赛时,我站在左上角的写着“从”字的格子里,可以横向或纵向的跳到相邻的格子里,但不能跳到对角的格子或其他位置,一直要跳到“华”字结束,
要求跳过的路线刚好构成“从我做起振兴中华”这句话
请你帮助小明算一算他一共有多少种可能的跳跃路线呢?
答案是一个整数,请通过浏览器直接提交该数字
注意:不要提交解答过程,或其他辅助说明类的内容
解题思路:
本题可以参用递归的思想求解,我们根据题目中所给的图可以分析得到,每一个格子的下一步和又一部都是符合要求的,
因此我们可以将问题转变为:求每一个格子的下方或右方有没有格子,如果有,则方法数加1,当走到边界的时候,那么只有一种方法,就是向下或者向右,求出每一格有多少种方法,最后求出坐标在(0,0)的格子有多少种方法。
同时也可以参考数据结构中树的深度搜索的思想
答案源码:
package 一三年省赛真题; public class Year2013_Bt3 { public static void main(String[] args) { int answer = f(0,0);//从(0,0)点开始 System.out.println(answer); } /** * 计算在当前点上有多少种走法 * @param i j 横纵坐标 * @return 该点上可以走的方法 * */ public static int f(int i,int j) { if (i==3||j==4) { return 1; } return f(i, j+1) + f(i+1, j); } }
输出样例: